由 JavaScript 調(diào)用的服務器頁面,是名為 "getuser.php" 的簡單 PHP 文件。
創(chuàng)新互聯(lián)自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站設(shè)計、成都網(wǎng)站制作、電子商務、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應用系統(tǒng)開發(fā)管理經(jīng)驗、成熟的應用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團隊及專業(yè)的網(wǎng)站設(shè)計師團隊。
該頁面用 PHP 編寫,并使用 MySQL 數(shù)據(jù)庫。
其中的代碼執(zhí)行針對數(shù)據(jù)庫的 SQL 查詢,并以 HTML 表格返回結(jié)果:
?php
$q=$_GET["q"];
$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("ajax_demo", $con);
$sql="SELECT * FROM user WHERE id = '".$q."'";
$result = mysql_query($sql);
echo "table border='1'
tr
thFirstname/th
thLastname/th
thAge/th
thHometown/th
thJob/th
/tr";
while($row = mysql_fetch_array($result))
{
echo "tr";
echo "td" . $row['FirstName'] . "/td";
echo "td" . $row['LastName'] . "/td";
echo "td" . $row['Age'] . "/td";
echo "td" . $row['Hometown'] . "/td";
echo "td" . $row['Job'] . "/td";
echo "/tr";
}
echo "/table";
mysql_close($con);
?
例子解釋:
當查詢從 JavaScript 被發(fā)送到這個 PHP 頁面,會發(fā)生:
PHP 打開到達 MySQL 服務器的連接
找到擁有指定姓名的 "user"
創(chuàng)建表格,插入數(shù)據(jù),然后將其發(fā)送到 "txtHint" 占位符
因為json_decode()函數(shù)是有兩個參數(shù)的,第二個參數(shù)默認是false,你如果不設(shè)置的話,他會把數(shù)據(jù)轉(zhuǎn)換成StdClass,你用[]是無法訪問屬性的,得用-
所以會返回空白
所以要不然改成$compn-compananme,或者json_decode($db-unsqlin($_GET['compname']),true);
你如果像ajax調(diào)取數(shù)據(jù)庫的信息 那你需要在PHP中讀取數(shù)據(jù)庫讓ajax去訪問你得php然后獲取到你的數(shù)據(jù)。
首先$_POST是數(shù)組不是方法,你要確認你是否是post提交的,并且變量是否是username
AJAX:
$.post('index.php',{'username':'a'},function(ret){
});
PHP:
$username = $_POST['username'];
本篇將繼續(xù)通過該實例講解與數(shù)據(jù)庫的交互方式。實例中用到的是MySQL,也可以根據(jù)自己的需要替換為其他數(shù)據(jù)庫,其連接方式可以參考PHP相關(guān)手冊。
在下面源程序包中dbconnector.php
提供了與MySQL的連接函數(shù)。
復制代碼
代碼如下:
?php
//定義數(shù)據(jù)連接變量
define
("MYSQLHOST",
"localhost");
define
("MYSQLUSER",
"root");
define
("MYSQLPASS",
"root");
define
("MYSQLDB",
"test");
function
opendatabase(){
//連接數(shù)據(jù)庫所在服務器
$db
=
mysql_connect
(MYSQLHOST,MYSQLUSER,MYSQLPASS);
try
{
if
(!$db){
//若無法連接則提示錯誤
$exceptionstring
=
"Error
connection
to
database:
br
/";
$exceptionstring
.=
mysql_errno().":
".mysql_error();
throw
new
exception
($exceptionstring);
}
else{
//連接數(shù)據(jù)庫(test)
mysql_select_db
(MYSQLDB,$db);
}
return
$db;
}catch
(exception
$e){
echo
$e-getmessage();
die();
}
}
?
當鼠標放到某個日期上時會調(diào)用functions.js中的checkfortasks函數(shù)。同時checkfortasks會加載taskchecker.php程序,它會到MySQL中查詢該日期下所有的備忘錄信息,并將結(jié)果返回到頁面中。
復制代碼
代碼如下:
?php
//調(diào)用數(shù)據(jù)庫連接程序
require_once
("dbconnector.php");
//連接數(shù)據(jù)庫
$db
=
opendatabase();
//在MySQL查詢備忘錄
$querystr
=
"SELECT
description
FROM
task
WHERE
thedate='"
.
addslashes
($_GET['thedate'])
.
"'";
//執(zhí)行SQL
if
($datequery
=
mysql_query
($querystr)){
//判斷查詢是否有值
if
(mysql_num_rows
($datequery)
0){
?
div
style="width:
150px;
background:
#FFBC37;
border-style:
solid;
border-color:
#000000;
border-width:
1px;"
div
style="padding:
10px;"
?php
//顯示備忘錄信息
while
($datedata
=
mysql_fetch_array
($datequery)){
if
(!get_magic_quotes_gpc()){
echo
stripslashes
($datedata['description']);
}
else{
echo
$datedata['description'];
}
}
?
/div
/div
?php
}
}
else{
//數(shù)據(jù)庫查詢錯誤
echo
mysql_error();
}
//關(guān)閉數(shù)據(jù)庫
mysql_close
($db);
?
對于Ajax的使用和上一篇的原理是一樣的:1.
通過事件調(diào)用Ajax函數(shù);2.
通過函數(shù)請求其他PHP程序,PHP程序中可以對數(shù)據(jù)庫之類的數(shù)據(jù)源進行讀、寫、改操作;3.
將處理結(jié)果加載到事件激發(fā)頁面。在下圖中鼠標放到26號時,Ajax會在MySQL中查詢到“Football
Match”事件并加載到當前頁面。
源代碼下載
//js
$.ajax({
async: false,
url:url,//后臺地址
type:'GET',
dataType:"json",
success: function(data){
//data,后臺返回數(shù)據(jù)
},
error: function(){
alert("輸出錯誤");
}
});
//后臺函數(shù)
public function get_content(){
$lists = M('bbs_note')-select();//獲取數(shù)據(jù)庫數(shù)據(jù)
if(!empty($lists)){
$this-ajaxReturn($lists);//返回數(shù)據(jù)
}
}