欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

PHP 和 AJAX

系統 2825 0
AJAX 簡介
AJAX = Asynchronous JavaScript And XML(異步 JavaScript 及 XML)
AJAX 是 Asynchronous JavaScript And XML 的首字母縮寫。

AJAX 并不是一種新的編程語言,而僅僅是一種新的技術,它可以創建更好、更快且交互性更強的 web 應用程序。

AJAX 使用 JavaScript 在 web 瀏覽器與 web 服務器之間來發送和接收數據。

通過在幕后與 web 服務器交換數據,而不是每當用戶作出改變時重載整個 web 頁面,AJAX 技術可以使網頁更迅速地響應。
AJAX 基于開放的標準
AJAX 基于以下開放的標準:

JavaScript
XML
HTML
CSS
在 AJAX 中使用的開放標準被良好地定義,并得到所有主要瀏覽器的支持。AJAX 應用程序獨立于瀏覽器和平臺。(可以說,它是一種跨平臺跨瀏覽器的技術)。
AJAX 事關更好的 Internet 應用程序
與桌面應用程序相比,Web 應用程序有很多優勢:

可擁有更多用戶
更容易安裝和維護
更容易開發
但是, 應用程序不總是象傳統應用程序那樣強大和友好。

通過 AJAX,可以使 Internet 應用程序更加強大(更輕巧、更快速,且更易使用)。
今天您就可以開始使用 AJAX
沒有什么新知識需要學習。

AJAX 基于開放的標準。而這些標準已被大多數開發者使用多年。

大多數 web 應用程序可通過使用 AJAX 技術進行重寫,來替代傳統的 HTML 表單。
AJAX 使用 XML 和 HTTP 請求
傳統的 web 應用程序會把數據提交到 web 服務器(使用 HTML 表單)。在 web 服務器把數據處理完畢之后,會向用戶返回一張完整的新網頁。

由于每當用戶提交輸入,服務器就會返回新網頁,傳統的 web 應用程序往往運行緩慢,且越來越不友好。

通過 AJAX,web 應用程序無需重載網頁,就可以發送并取回數據。完成這項工作,需要通過向服務器發送 HTTP 請求(在幕后),并通過當服務器返回數據時使用 JavaScript 僅僅修改網頁的某部分。

一般使用 XML 作為接收服務器數據的格式,盡管可以使用任何格式,包括純文本。

您將在本教程接下來的章節學習到如何完成這些工作。
PHP 和 AJAX
不存在什么 AJAX 服務器。

AJAX 是一種在瀏覽器運行的技術。它使用瀏覽器與 web 服務器之間的異步數據傳輸,使網頁從服務器請求少量的信息,而不是整張頁面。

AJAX 是一種獨立于 web 服務器軟件的 web 瀏覽器技術。

但是,在本教程中,我們將集中在運行在 PHP 服務器上的實際案例,而不是 AJAX 的工作原理。

如需閱讀更多有關 AJAX 如何工作的知識,請訪問我們的 AJAX 教程。

AJAX XMLHttpRequest
XMLHttpRequest 對象使 AJAX 成為可能。
XMLHttpRequest
XMLHttpRequest 對象是 AJAX 的關鍵。

該對象在 Internet Explorer 5.5 與 2000 年 7 月發布之后就已經可用了,但是在 2005 人們開始討論 AJAX 和 Web 2.0 之前,這個對象并沒有得到充分的認識。
創建 XMLHttpRequest 對象
不同的瀏覽器使用不同的方法來創建 XMLHttpRequest 對象。

Internet Explorer 使用 ActiveXObject。

其他瀏覽器使用名為 XMLHttpRequest 的 JavaScript 內建對象。

要克服這個問題,可以使用這段簡單的代碼:
    
var XMLHttp=null
if (window.XMLHttpRequest)
  {
  XMLHttp=new XMLHttpRequest()
  }
else if (window.ActiveXObject)
  {
  XMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
  }

  

代碼解釋:
1、首先創建一個作為 XMLHttpRequest 對象使用的 XMLHttp 變量。把它的值設置為null。
2、然后測試 window.XMLHttpRequest 對象是否可用。在新版本的 Firefox, Mozilla, Opera 以及 Safari 瀏覽器中,該對象是可用的。
3、如果可用,則用它創建一個新對象:XMLHttp=new XMLHttpRequest()
4、如果不可用,則檢測 window.ActiveXObject 是否可用。在 Internet Explorer version 5.5 及更高的版本中,該對象是可用的。
5、如果可用,使用它來創建一個新對象:XMLHttp=new ActiveXObject()
改進的例子
一些程序員喜歡使用最新最快的版本的 XMLHttpRequest 對象。

下面的例子試圖加載微軟最新版本的 "Msxml2.XMLHTTP",在 Internet Explorer 6 中可用,如果無法加載,則后退到 "Microsoft.XMLHTTP",在 Internet Explorer 5.5 及其后版本中可用。
    
function GetXmlHttpObject()
{
var xmlHttp=null;

try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

  

代碼解釋:
首先創建用作 XMLHttpRequest 對象的 XMLHttp 變量。把它的值設置為 null。
按照 web 標準創建對象 (Mozilla, Opera 以及 Safari):XMLHttp=new XMLHttpRequest()
按照微軟的方式創建對象,在 Internet Explorer 6 及更高的版本可用:XMLHttp=new ActiveXObject("Msxml2.XMLHTTP")
如果捕獲錯誤,則嘗試更老的方法 (Internet Explorer 5.5) :XMLHttp=new ActiveXObject("Microsoft.XMLHTTP")

PHP 和 AJAX 請求
AJAX 請求
在下面的 AJAX 例子中,我們將演示當用戶向 web 表單中輸入數據時,網頁如何與在線的 web 服務器進行通信。
在下面的文本框中輸入名字:
這個例子包括三張頁面:

一個簡單的 HTML 表單
一段 JavaScript
一張 PHP 頁面
HTML 表單
這是 HTML 表單。它包含一個簡單的 HTML 表單和指向 JavaScript 的鏈接:
    
<html>
<head>
<script src="clienthint.js"></script> 
</head>

<body>

<form> 
First Name:
<input type="text" id="txt1"
onkeyup="showHint(this.value)">
</form>

<p>Suggestions: <span id="txtHint"></span></p>

</body>
</html>

  

例子解釋 - HTML 表單
正如您看到的,上面的 HTML 頁面含有一個簡單的 HTML 表單,其中帶有一個名為 "txt1" 的輸入字段。

該表單是這樣工作的:

當用戶在輸入域中按下并松開按鍵時,會觸發一個事件
當該事件被觸發時,執行名為 showHint() 的函數
表單的下面是一個名為 "txtHint" 的 <span>。它用作 showHint() 函數所返回數據的占位符。
JavaScript
JavaScript 代碼存儲在 "clienthint.js" 文件中,它被鏈接到 HTML 文檔:
    
var xmlHttp

function showHint(str)
{
if (str.length==0)
  { 
  document.getElementById("txtHint").innerHTML=""
  return
  }
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
  {
  alert ("Browser does not support HTTP Request")
  return
  } 
var url="gethint.php"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
} 

function stateChanged() 
{ 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 
 document.getElementById("txtHint").innerHTML=xmlHttp.responseText 
 } 
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

  

例子解釋:
showHint() 函數
每當在輸入域中輸入一個字符,該函數就會被執行一次。

如果文本框中有內容 (str.length > 0),該函數這樣執行:

定義要發送到服務器的 URL(文件名)
把帶有輸入域內容的參數 (q) 添加到這個 URL
添加一個隨機數,以防服務器使用緩存文件
調用 GetXmlHttpObject 函數來創建 XMLHTTP 對象,并在事件被觸發時告知該對象執行名為 stateChanged 的函數
用給定的 URL 來打開打開這個 XMLHTTP 對象
向服務器發送 HTTP 請求
如果輸入域為空,則函數簡單地清空 txtHint 占位符的內容。

stateChanged() 函數
每當 XMLHTTP 對象的狀態發生改變,則執行該函數。

在狀態變成 4 (或 "complete")時,用響應文本填充 txtHint 占位符 txtHint 的內容。

GetXmlHttpObject() 函數
AJAX 應用程序只能運行在完整支持 XML 的 web 瀏覽器中。

上面的代碼調用了名為 GetXmlHttpObject() 的函數。

該函數的作用是解決為不同瀏覽器創建不同 XMLHTTP 對象的問題。

這一點在上一節中已經解釋過了。
PHP 頁面
被 JavaScript 代碼調用的服務器頁面是一個名為 "gethint.php" 的簡單服務器頁面。

"gethint.php" 中的代碼會檢查名字數組,然后向客戶端返回對應的名字:
    
<?php
// Fill up array with names
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";

//get the q parameter from URL
$q=$_GET["q"];

//lookup all hints from array if length of q>0
if (strlen($q) > 0)
{
$hint="";
for($i=0; $i<count($a); $i++)
  {
  if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
    {
    if ($hint=="")
      {
      $hint=$a[$i];
      }
    else
      {
      $hint=$hint." , ".$a[$i];
      }
    }
  }
}

//Set output to "no suggestion" if no hint were found
//or to the correct values
if ($hint == "")
{
$response="no suggestion";
}
else
{
$response=$hint;
}

//output the response
echo $response;
?>

  

如果存在從 JavaScript 送來的文本 (strlen($q) > 0),則:

找到與 JavaScript 所傳送的字符相匹配的名字
如果找到多個名字,把所有名字包含在 response 字符串中
如果沒有找到匹配的名字,把 response 設置為 "no suggestion"
如果找到一個或多個名字,把 response 設置為這些名字
把 response 發送到 "txtHint" 占位符

PHP 和 AJAX XML 實例
AJAX XML 實例
在下面的 AJAX 實例中,我們將演示網頁如何使用 AJAX 技術從 XML 文件中讀取信息。
在下面的下列列表中選擇一個 CD
在此列出 CD 信息。
本例包括三張頁面:

一個簡單 HTML 表單
一個 XML 文件
一個 JavaScript 文件
一張 PHP 頁面
HTML 表單
上面的例子包含了一張簡單的 HTML 表單,以及指向 JavaScript 的鏈接:
    
<html>
<head>
<script src="selectcd.js"></script>
</head>

<body>

<form> 
Select a CD:
<select name="cds" onchange="showCD(this.value)">
<option value="Bob Dylan">Bob Dylan</option>
<option value="Bee Gees">Bee Gees</option>
<option value="Cat Stevens">Cat Stevens</option>
</select>
</form>

<p>
<div id="txtHint"><b>CD info will be listed here.</b></div>
</p>

</body>
</html>

  

例子解釋:
正如您看到的,它僅僅是一張簡單的 HTML 表單,其中帶有名為 "cds" 的下拉列表。

表單下面的段落包含了一個名為 "txtHint" 的 div。這個 div 用作從 web 服務器檢索到的數據的占位符。

當用戶選擇數據時,會執行名為 "showCD" 的函數。這個函數的執行是由 "onchange" 事件觸發的。

換句話說,每當用戶改變了下拉列表中的值,就會調用 showCD 函數。
XML 文件
XML 文件是 "cd_catalog.xml"。該文件中包含了有關 CD 收藏的數據。
    
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy?-->
<CATALOG>
	<CD>
		<TITLE>Empire Burlesque</TITLE>
		<ARTIST>Bob Dylan</ARTIST>
		<COUNTRY>USA</COUNTRY>
		<COMPANY>Columbia</COMPANY>
		<PRICE>10.90</PRICE>
		<YEAR>1985</YEAR>
	</CD>
	<CD>
		<TITLE>Hide your heart</TITLE>
		<ARTIST>Bonnie Tyler</ARTIST>
		<COUNTRY>UK</COUNTRY>
		<COMPANY>CBS Records</COMPANY>
		<PRICE>9.90</PRICE>
		<YEAR>1988</YEAR>
	</CD>
	<CD>
		<TITLE>Greatest Hits</TITLE>
		<ARTIST>Dolly Parton</ARTIST>
		<COUNTRY>USA</COUNTRY>
		<COMPANY>RCA</COMPANY>
		<PRICE>9.90</PRICE>
		<YEAR>1982</YEAR>
	</CD>
	<CD>
		<TITLE>For the good times</TITLE>
		<ARTIST>Kenny Rogers</ARTIST>
		<COUNTRY>UK</COUNTRY>
		<COMPANY>Mucik Master</COMPANY>
		<PRICE>8.70</PRICE>
		<YEAR>1995</YEAR>
	</CD>
    </CATALOG>

  

JavaScript
這是存儲在 "selectcd.js" 文件中的 JavaScript 代碼:
    
var xmlHttp

function showCD(str)
{ 
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
 {
 alert ("Browser does not support HTTP Request")
 return
 } 
var url="getcd.php"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged() 
{ 
 if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 
 document.getElementById("txtHint").innerHTML=xmlHttp.responseText 
 } 
}

function GetXmlHttpObject()
{
var xmlHttp=null;

try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

  

例子解釋:
stateChanged() 和 GetXmlHttpObject 函數與上一節中的相同,您可以參閱上一頁中的相關解釋。

showCD() 函數
假如選擇了下拉列表中的某個項目,則函數執行:

調用 GetXmlHttpObject 函數來創建 XMLHTTP 對象
定義發送到服務器的 URL(文件名)
向 URL 添加帶有下拉列表內容的參數 (q)
添加一個隨機數,以防服務器使用緩存的文件
當觸發事件時調用 stateChanged
通過給定的 URL 打開 XMLHTTP 對象
向服務器發送 HTTP 請求
PHP 頁面
這個被 JavaScript 調用的服務器頁面,是一個名為 "getcd.php" 的簡單 PHP 文件。

這張頁面是用 PHP 編寫的,使用 XML DOM 來加載 XML 文檔 "cd_catalog.xml"。

代碼運行針對 XML 文件的查詢,并以 HTML 返回結果:
    
<?php
$q=$_GET["q"];

$xmlDoc = new DOMDocument();
$xmlDoc->load("cd_catalog.xml");

$x=$xmlDoc->getElementsByTagName('ARTIST');

for ($i=0; $i<=$x->length-1; $i++)
{
//Process only element nodes
if ($x->item($i)->nodeType==1)
  {
  if ($x->item($i)->childNodes->item(0)->nodeValue == $q)
    { 
    $y=($x->item($i)->parentNode);
    }
  }
}

$cd=($y->childNodes);

for ($i=0;$i<$cd->length;$i++)
{ 
//Process only element nodes
if ($cd->item($i)->nodeType==1)
  { 
  echo($cd->item($i)->nodeName);
  echo(": ");
  echo($cd->item($i)->childNodes->item(0)->nodeValue);
  echo("<br />");
  } 
}
?>

  

例子解釋
當請求從 JavaScript 發送到 PHP 頁面時,發生:

PHP 創建 "cd_catalog.xml" 文件的 XML DOM 對象
循環所有 "artist" 元素 (nodetypes = 1),查找與 JavaScript 所傳數據向匹配的名字
找到 CD 包含的正確 artist
輸出 album 的信息,并發送到 "txtHint" 占位符

PHP 和 AJAX MySQL 數據庫實例
AJAX 數據庫實例
在下面的 AJAX 實例中,我們將演示網頁如何使用 AJAX 技術從 MySQL 數據庫中讀取信息。
在下拉列表中選擇一個名字 (測試說明:該實例功能未實現)
在此列出用戶信息。
此列由四個元素組成:

MySQL 數據庫
簡單的 HTML 表單
JavaScript
PHP 頁面
數據庫
將在本例中使用的數據庫看起來類似這樣:
PHP 和 AJAX

HTML 表單
上面的例子包含了一個簡單的 HTML 表單,以及指向 JavaScript 的鏈接:
    
<html>
<head>
<script src="selectuser.js"></script>
</head>
<body>

<form> 
Select a User:
<select name="users" onchange="showUser(this.value)">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>

<p>
<div id="txtHint"><b>User info will be listed here.</b></div>
</p>

</body>
</html>

  

例子解釋 - HTML 表單
正如您看到的,它僅僅是一個簡單的 HTML 表單,其中帶有名為 "users" 的下拉列表,這個列表包含了姓名,以及與數據庫的 "id" 對應的選項值。

表單下面的段落包含了名為 "txtHint" 的 div。這個 div 用作從 web 服務器檢索到的信息的占位符。

當用戶選擇數據時,執行名為 "showUser()" 的函數。該函數的執行由 "onchange" 事件觸發。

換句話說:每當用戶改變下拉列表中的值,就會調用 showUser() 函數。
JavaScript
這是存儲在 "selectuser.js" 文件中的 JavaScript 代碼:
    
var xmlHttp

function showUser(str)
{ 
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
 {
 alert ("Browser does not support HTTP Request")
 return
 }
var url="getuser.php"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged() 
{ 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 
 document.getElementById("txtHint").innerHTML=xmlHttp.responseText 
 } 
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 //Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

  

例子解釋:
stateChanged() 和 GetXmlHttpObject 函數與 PHP AJAX 請求 那一節中的相同,您可以參閱其中的相關解釋。

showUser() 函數
假如下拉列表中的項目被選擇,函數執行:

調用 GetXmlHttpObject 函數來創建 XMLHTTP 對象
定義發送到服務器的 URL(文件名)
向 URL 添加帶有下拉列表內容的參數 (q)
添加一個隨機數,以防服務器使用緩存的文件
當觸發事件時調用 stateChanged
通過給定的 URL 打開 XMLHTTP 對象
向服務器發送 HTTP 請求
PHP 頁面
由 JavaScript 調用的服務器頁面,是名為 "getuser.php" 的簡單 PHP 文件。

該頁面用 PHP 編寫,并使用 MySQL 數據庫。

其中的代碼執行針對數據庫的 SQL 查詢,并以 HTML 表格返回結果:
    
<?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>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</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 被發送到這個 PHP 頁面,會發生:

PHP 打開到達 MySQL 服務器的連接
找到擁有指定姓名的 "user"
創建表格,插入數據,然后將其發送到 "txtHint" 占位符

PHP 和 AJAX responseXML 實例
AJAX 可用于以 XML 返回數據庫信息。
AJAX Database 轉 XML 實例 (測試說明:該實例功能未實現)
在下面的 AJAX 實例中,我們將演示網頁如何從 MySQL 數據庫中讀取信息,把數據轉換為 XML 文檔,并在不同的地方使用這個文檔來顯示信息。

本例與上一節中的 "PHP AJAX Database" 這個例子很相似,不過有一個很大的不同:在本例中,我們通過使用 responseXML 函數從 PHP 頁面得到的是 XML 形式的數據。

把 XML 文檔作為響應來接收,使我們有能力更新頁面的多個位置,而不僅僅是接收一個 PHP 輸出并顯示出來。

在本例中,我們將使用從數據庫接收到的信息來更新多個 <span> 元素。
在下拉列表中選擇一個名字
此列由四個元素組成:

MySQL 數據庫
簡單的 HTML 表單
JavaScript
PHP 頁面
數據庫
將在本例中使用的數據庫看起來類似這樣:
PHP 和 AJAX
HTML 表單
上面的例子包含了一個簡單的 HTML 表單,以及指向 JavaScript 的鏈接:
    
<html>
<head>
<script src="responsexml.js"></script>
</head>
<body>

<form> 
Select a User:
<select name="users" onchange="showUser(this.value)">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>

<h2>
<span id="firstname"></span>&nbsp;<span id="lastname"></span>
</h2>

<span id="job"></span>

<div style="text-align: right">
<span id="age_text"></span>
<span id="age"></span>
<span id="hometown_text"></span>
<span id="hometown"></span>
</div>

</body>
</html>

  

例子解釋 - HTML 表單
HTML 表單是一個下拉列表,其 name 屬性的值是 "users",可選項的值與數據庫的 id 字段相對應
表單下面有幾個 <span> 元素,它們用作我們所接收到的不同的值的占位符
當用戶選擇了具體的選項,函數 "showUser()" 就會執行。該函數的執行由 "onchange" 事件觸發
換句話說,每當用戶在下拉列表中改變了值,函數 showUser() 就會執行,并在指定的 <span> 元素中輸出結果。
JavaScript
這是存儲在文件 "responsexml.js" 中的 JavaScript 代碼:
    
var xmlHttp

function showUser(str)
 { 
 xmlHttp=GetXmlHttpObject()
 if (xmlHttp==null)
  {
  alert ("Browser does not support HTTP Request")
  return
  } 
 var url="responsexml.php"
 url=url+"?q="+str
 url=url+"&sid="+Math.random()
 xmlHttp.onreadystatechange=stateChanged 
 xmlHttp.open("GET",url,true)
 xmlHttp.send(null)
 }

function stateChanged() 
{ 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
 xmlDoc=xmlHttp.responseXML;
 document.getElementById("firstname").innerHTML=
 xmlDoc.getElementsByTagName("firstname")[0].childNodes[0].nodeValue;
 document.getElementById("lastname").innerHTML=
 xmlDoc.getElementsByTagName("lastname")[0].childNodes[0].nodeValue;
 document.getElementById("job").innerHTML=
 xmlDoc.getElementsByTagName("job")[0].childNodes[0].nodeValue;
 document.getElementById("age_text").innerHTML="Age: ";
 document.getElementById("age").innerHTML=
 xmlDoc.getElementsByTagName("age")[0].childNodes[0].nodeValue;
 document.getElementById("hometown_text").innerHTML="<br/>From: ";
 document.getElementById("hometown").innerHTML=
 xmlDoc.getElementsByTagName("hometown")[0].childNodes[0].nodeValue;
 }
}

function GetXmlHttpObject()
 { 
 var objXMLHttp=null
 if (window.XMLHttpRequest)
  {
  objXMLHttp=new XMLHttpRequest()
  }
 else if (window.ActiveXObject)
  {
  objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
  }
 return objXMLHttp
 }

  

例子解釋:
showUser() 與 GetXmlHttpObject 函數與 PHP 和 AJAX MySQL 數據庫實例 這一節中的例子是相同的。您可以參閱其中的相關解釋。

stateChanged() 函數
如果選擇了下拉列表中的項目,該函數執行:

通過使用 responseXML 函數,把 "xmlDoc" 變量定義為一個 XML 文檔
從這個 XML 文檔中取回數據,把它們放在正確的 "span" 元素中
PHP 頁面
這個由 JavaScript 調用的服務器頁面,是一個名為 "responsexml.php" 的簡單的 PHP 文件。

該頁面由 PHP 編寫,并使用 MySQL 數據庫。

代碼會運行一段針對數據庫的 SQL 查詢,并以 XML 文檔返回結果:
    
<?php
header('Content-Type: text/xml');
header("Cache-Control: no-cache, must-revalidate");
//A date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

$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 '<?xml version="1.0" encoding="ISO-8859-1"?>
<person>';
while($row = mysql_fetch_array($result))
 {
 echo "<firstname>" . $row['FirstName'] . "</firstname>";
 echo "<lastname>" . $row['LastName'] . "</lastname>";
 echo "<age>" . $row['Age'] . "</age>";
 echo "<hometown>" . $row['Hometown'] . "</hometown>";
 echo "<job>" . $row['Job'] . "</job>";
 }
echo "</person>";

mysql_close($con);
?>

  

例子解釋:
當查詢從 JavaScript 送達 PHP 頁面時,會發生:

PHP 文檔的 content-type 被設置為 "text/xml"
PHP 文檔被設置為 "no-cache",以防止緩存
用 HTML 頁面送來的數據設置 $q 變量
PHP 打開與 MySQL 服務器的連接
找到帶有指定 id 的 "user"
以 XML 文檔輸出數據

PHP 和 AJAX Live Search
AJAX 可為用戶提供更友好、交互性更強的搜索體驗。
AJAX Live Search
在下面的 AJAX 例子中,我們將演示一個實時的搜索。

實時的搜索與傳統搜索相比,具有很多優勢:

當鍵入數據時,就會顯示出匹配的結果
當繼續鍵入數據時,對結果進行過濾
如果結果太少,刪除字符就可以獲得更寬的范圍
在下面的文本框中搜索 W3School 的頁面
本例包括四個元素:

簡單的 HTML 表單
JavaScript
PHP 頁面
XML 文檔
在本例中,結果在一個 XML 文檔 (links.xml) 中進行查找。為了讓這個例子小而簡單,我們只提供 8 個結果
    
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy?-->
<pages>
<link>
<title>HTML DOM alt Property</title>
<url>http://www.w3school.com.cn/htmldom/prop_img_alt.asp</url>
</link>
<link>
<title>HTML DOM height Property</title>
<url>http://www.w3school.com.cn/htmldom/prop_img_height.asp</url>
</link>
<link>
<title>HTML a tag</title>
<url>http://www.w3school.com.cn/tags/tag_a.asp</url>
</link>
<link>
<title>HTML br tag</title>
<url>http://www.w3school.com.cn/tags/tag_br.asp</url>
</link>
<link>
<title>CSS background Property</title>
<url>http://www.w3school.com.cn/css/pr_background.asp</url>
</link>
<link>
<title>CSS border Property</title>
<url>http://www.w3school.com.cn/css/pr_border.asp</url>
</link>
<link>
<title>JavaScript Date() Method</title>
<url>http://www.w3school.com.cn/jsref/jsref_date.asp</url>
</link>
<link>
<title>JavaScript anchor() Method</title>
<url>http://www.w3school.com.cn/jsref/jsref_anchor.asp</url>
</link>
</pages>

  

HTML 表單
這是 HTML 頁面。它包含一個簡單的 HTML 表單,針對此表單的 CSS 樣式,以及指向 JavaScript 的鏈接:
    
<html>
<head>
<script src="livesearch.js"></script> 
<style type="text/css"> 
#livesearch
  { 
  margin:0px;
  width:194px; 
  }
#txt1
  { 
  margin:0px;
  } 
</style>
</head>
<body>

<form>
<input type="text" id="txt1" size="30"
onkeyup="showResult(this.value)">

<div id="livesearch"></div>
</form>

</body>
</html>

  

例子解釋 - HTML 表單
正如你看到的,HTML 頁面包含一個簡單的 HTML 表單,其中的文本框名為 "txt1"。

表單是這樣工作的:

當用戶在文本框中按鍵并松開按鍵時,會觸發一個事件
當事件觸發時,會執行名為 showResult() 的函數
表單下面是名為 "livesearch" 的 <div> 元素。它用作 showResult() 所返回數據的占位符
JavaScript
JavaScript 代碼存儲在與 HTML 文檔連接的 "livesearch.js" 中:
    
var xmlHttp

function showResult(str)
{
if (str.length==0)
 { 
 document.getElementById("livesearch").
 innerHTML="";
 document.getElementById("livesearch").
 style.border="0px";
 return
 }

xmlHttp=GetXmlHttpObject()

if (xmlHttp==null)
 {
 alert ("Browser does not support HTTP Request")
 return
 }

var url="livesearch.php"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
} 

function stateChanged() 
{ 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 
 document.getElementById("livesearch").
 innerHTML=xmlHttp.responseText;
 document.getElementById("livesearch").
 style.border="1px solid #A5ACB2";
 } 
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

  

例子解釋:
GetXmlHttpObject 與 PHP 和 AJAX 請求 中的例子相同。

showResult() 函數
該函數每當一個字符輸入文本框就會執行一次。

如果文本域中沒有輸入 (str.length == 0),該函數把返回字段設置為空,并刪除周圍的任何邊框。

不過,如果文本域中存在輸入,則函數執行:

定義發送到服務器的 url (文件名)
把帶有輸入框內容的參數 (q) 添加到 url
添加一個隨機數,以防止服務器使用緩存文件
調用 GetXmlHttpObject 函數來創建 XMLHTTP 對象,并在觸發一個變化時告知此函數執行名為 stateChanged 的一個函數
使用給定的 url 來打開 XMLHTTP 對象
向服務器發送 HTTP 請求
stateChanged() 函數
每當 XMLHTTP 對象的狀態發生變化時,該函數就會執行。

當狀態變為 4 (或 "complete") 時,就會使用響應文本來填充 txtHint 占位符的內容,并在返回字段周圍設置一個邊框。
PHP 頁面
由 JavaScript 代碼調用的服務器頁面是名為 "livesearch.php" 的 PHP 文件。

"livesearch.php" 中的代碼檢查那個 XML 文檔 "links.xml"。該文檔 w3school.com.cn 上的一些頁面的標題和 URL。

這些代碼會搜索 XML 文件中匹配搜索字符串的標題,并以 HTML 返回結果:
    
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("links.xml");

$x=$xmlDoc->getElementsByTagName('link');

//get the q parameter from URL
$q=$_GET["q"];

//lookup all links from the xml file if length of q>0
if (strlen($q) > 0)
{
$hint="";
for($i=0; $i<($x->length); $i++)
 {
 $y=$x->item($i)->getElementsByTagName('title');
 $z=$x->item($i)->getElementsByTagName('url');
 if ($y->item(0)->nodeType==1)
  {
  //find a link matching the search text
  if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q))
   {
   if ($hint=="")
    {
    $hint="<a href='" . 
    $z->item(0)->childNodes->item(0)->nodeValue . 
    "' target='_blank'>" . 
    $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
    }
   else
    {
    $hint=$hint . "<br /><a href='" . 
    $z->item(0)->childNodes->item(0)->nodeValue . 
    "' target='_blank'>" . 
    $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
    }
   }
  }
 }
}

// Set output to "no suggestion" if no hint were found
// or to the correct values
if ($hint == "")
 {
 $response="no suggestion";
 }
else
 {
 $response=$hint;
 }
 
//output the response
echo $response;
?>

  

例子解釋:
如果從 JavaScript 送來了任何文本 (strlen($q) > 0),會發生:

PHP 創建 "links.xml" 文件的一個 XML DOM 對象
遍歷所有 "title" 元素 (nodetypes = 1),以便找到匹配 JavaScript 所傳數據的 name
找到包含正確 title 的 link,并設置為 "$response" 變量。如果找到多于一個匹配,所有的匹配都會添加到變量
如果沒有找到匹配,則把 $response 變量設置為 "no suggestion"
$result 是送往 "livesearch" 占位符的輸出

PHP 和 AJAX RSS 閱讀器
RSS 閱讀器用于閱讀 RSS Feed。

RSS 允許對新聞和更新進行快速瀏覽。
AJAX RSS 閱讀器
在下面的 AJAX 實例中,我們將演示一個 RSS 閱讀器,通過它,來自 RSS 的內容在不進行刷新的情況下載入網頁。
在下面的列表框中選擇一個 RSS 新聞訂閱
在此列出 RSS Feed。

本例包括三個元素:

簡單的 HTML 表單
JavaScript
PHP 頁面
HTML 表單
這是 HTML 頁面。它包含一個簡單的 HTML 表單和執行一個 JavaScript 文件的鏈接:
    
<html>
<head>
<script type="text/javascript" src="getrss.js"></script>
</head>
<body>

<form> 
Select an RSS-Feed:
<select onchange="showRSS(this.value)">
<option value="Google">Google News</option>
<option value="MSNBC">MSNBC News</option>
</select>
</form>

<p><div id="rssOutput">
<b>RSS Feed will be listed here.</b></div></p>
</body>
</html>

  

例子解釋 - HTML 表單
正如您看到的,上面的 HTML 頁面包含一個簡單的 HTML 表單,其中帶有一個下拉列表框。

表單是這樣工作的:

當用戶選擇下拉框中的選項時,會觸發一個事件
當事件觸發時,執行 showRSS() 函數
表單下面是名為 "rssOutput" 的一個 <div>。它用作 showRSS() 函數所返回的數據的占位符。
JavaScript
JavaScript 代碼存儲在 "getrss.js" 中,它與 HTML 文檔相連接:
    
var xmlHttp

function showRSS(str)
 { 
 xmlHttp=GetXmlHttpObject()
 if (xmlHttp==null)
  {
  alert ("Browser does not support HTTP Request")
  return
  }
 var url="getrss.php"
 url=url+"?q="+str
 url=url+"&sid="+Math.random()
 xmlHttp.onreadystatechange=stateChanged 
 xmlHttp.open("GET",url,true)
 xmlHttp.send(null)
 }

function stateChanged() 
 { 
 if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  { 
  document.getElementById("rssOutput")
  .innerHTML=xmlHttp.responseText 
  } 
 }

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

  

例子解釋:
stateChanged() 和 GetXmlHttpObject 函數與 PHP 和 AJAX 請求 這一節中的例子相同。

showRSS() 函數
每當在下拉框中選擇選擇時,該函數就會執行:

定義發送到服務器的 url (文件名)
把參數 (q) 添加到 url,參數內容是下拉框中的被選項
添加一個隨機數,以防止服務器緩存文件
調用 GetXmlHttpObject 函數來創建 XMLHTTP 對象,并告知該對象在觸發一個改變時去執行 stateChanged 函數
通過給定的 url 來打開 XMLHTTP
把 HTTP 請求發動到服務器
PHP 頁面
調用 JavaScript 代碼的服務器頁面是名為 "getrss.php" 的 PHP 文件:
    
<?php
//get the q parameter from URL
$q=$_GET["q"];

//find out which feed was selected
if($q=="Google")
 {
 $xml=("http://news.google.com/news?ned=us&topic=h&output=rss");
 }
elseif($q=="MSNBC")
 {
 $xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");
 }

$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;

//output elements from "<channel>"
echo("<p><a href='" . $channel_link
 . "'>" . $channel_title . "</a>");
echo("<br />");
echo($channel_desc . "</p>");

//get and output "<item>" elements
$x=$xmlDoc->getElementsByTagName('item');
for ($i=0; $i<=2; $i++)
 {
 $item_title=$x->item($i)->getElementsByTagName('title')
 ->item(0)->childNodes->item(0)->nodeValue;
 $item_link=$x->item($i)->getElementsByTagName('link')
 ->item(0)->childNodes->item(0)->nodeValue;
 $item_desc=$x->item($i)->getElementsByTagName('description')
 ->item(0)->childNodes->item(0)->nodeValue;

 echo ("<p><a href='" . $item_link
 . "'>" . $item_title . "</a>");
 echo ("<br />");
 echo ($item_desc . "</p>");
 }
?>

  

例子解釋:
當一個選項從 JavaScript 發送時,會發生:

PHP 找出哪個 RSS feed 被選中
為選中的 RSS feed 創建 XML DOM 對象
找到并輸出來自 RSS 頻道的元素
遍歷前三個 RSS 項目中的元素,并進行輸出

PHP 和 AJAX 投票
AJAX 投票
在這個 AJAX 實例中,我們將演示一個投票程序,網頁在不重新加載的情況下,就可以獲得結果。
到目前為止,您喜歡 PHP 和 AJXA 嗎?
本例包括四個元素:

HTML 表單
JavaScript
PHP 頁面
存放結果的文本文件
HTML 表單
這是 HTML 頁面。它包含一個簡單的 HTML 表單,以及一個與 JavaScript 文件的連接:
    
<html>
<head>
<script src="poll.js"></script> 
</head>
<body>

<div id="poll">
<h2>Do you like PHP and AJAX so far?</h2>

<form>
Yes: 
<input type="radio" name="vote" 
value="0" onclick="getVote(this.value)">
<br />
No: 
<input type="radio" name="vote" 
value="1" onclick="getVote(this.value)">
</form>
</div>

</body>
</html>

  

例子解釋 - HTML 表單
正如您看到的,上面的 HTML 頁面包含一個簡單的 HTML 表單,其中的 <div> 元素帶有兩個單選按鈕。

表單這樣工作:

當用戶選擇 "yes" 或 "no" 時,會觸發一個事件
當事件觸發時,執行 getVote() 函數
圍繞該表單的是名為 "poll" 的 <div>。當數據從 getVote() 函數返回時,返回的數據會替代該表單。
文本文件
文本文件 (poll_result.txt) 中存儲來自投票程序的數據。

它類似這樣:
引用
0||0

第一個數字表示 "Yes" 投票,第二個數字表示 "No" 投票。

注釋:記得只允許您的 web 服務器來編輯該文本文件。不要讓其他人獲得訪問權,除了 web 服務器 (PHP)。
JavaScript
JavaScript 代碼存儲在 "poll.js" 中,并于 HTML 文檔相連接:
    
var xmlHttp

function getVote(int)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
 {
 alert ("Browser does not support HTTP Request")
 return
 } 
var url="poll_vote.php"
url=url+"?vote="+int
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
} 

function stateChanged() 
{ 
 if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 
 document.getElementById("poll").
 innerHTML=xmlHttp.responseText;
 } 
} 

function GetXmlHttpObject()
{ 
var objXMLHttp=null
if (window.XMLHttpRequest)
 {
 objXMLHttp=new XMLHttpRequest()
 }
else if (window.ActiveXObject)
 {
 objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
 }
return objXMLHttp
}

  

例子解釋:
stateChanged() 和 GetXmlHttpObject 函數與 PHP 和 AJAX 請求 這一節中的例子相同。

getVote() 函數
當用戶在 HTML 表單中選擇 "yes" 或 "no" 時,該函數就會執行。

定義發送到服務器的 url (文件名)
向 url 添加參數 (vote),參數中帶有輸入字段的內容
添加一個隨機數,以防止服務器使用緩存的文件
調用 GetXmlHttpObject 函數來創建 XMLHTTP 對象,并告知該對象當觸發一個變化時執行 stateChanged 函數
用給定的 url 來打開 XMLHTTP 對象
向服務器發送 HTTP 請求
PHP 頁面
由 JavaScript 代碼調用的服務器頁面是名為 "poll_vote.php" 的一個簡單的 PHP 文件。
    
<?php
$vote = $_REQUEST['vote'];

//get content of textfile
$filename = "poll_result.txt";
$content = file($filename);

//put content in array
$array = explode("||", $content[0]);
$yes = $array[0];
$no = $array[1];

if ($vote == 0)
 {
 $yes = $yes + 1;
 }
if ($vote == 1)
 {
 $no = $no + 1;
 }

//insert votes to txt file
$insertvote = $yes."||".$no;
$fp = fopen($filename,"w");
fputs($fp,$insertvote);
fclose($fp);
?>

<h2>Result:</h2>
<table>
<tr>
<td>Yes:</td>
<td>
<img src="poll.gif"
width='<?php echo(100*round($yes/($no+$yes),2)); ?>'
height='20'>
<?php echo(100*round($yes/($no+$yes),2)); ?>%
</td>
</tr>
<tr>
<td>No:</td>
<td>
<img src="poll.gif" 
width='<?php echo(100*round($no/($no+$yes),2)); ?>'
height='20'>
<?php echo(100*round($no/($no+$yes),2)); ?>%
</td>
</tr>
</table>

  

例子解釋:
所選的值從 JavaScript 傳來,然后會發生:

獲取 "poll_result.txt" 文件的內容
把文件內容放入變量,并向被選變量累加 1
把結果寫入 "poll_result.txt" 文件
輸出圖形化的投票結果

PHP 和 AJAX


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人+综合亚洲+天堂 | 欧美一区二区三区中文字幕 | 亚洲区在线播放 | 小视频在线观看免费 | 一级观看免费完整版视频 | 色午夜在线 | 精品女同一区二区三区免费播放 | 国内精品免费视频 | 久久久久欧美精品网站 | 浮力影院最新网址 | 韩日在线视频 | 日韩成人黄色 | 日韩午夜在线视频 | 九九视频在线观看 | 黄色草逼视频 | 国产网红主播chinese | 天天做天天爽 | 久久亚洲国产精品 | 99久久精品国产片 | 成人av一区 | 日韩欧美日本 | 欧美在线 | 亚洲 | 久热中文字幕在线精品首页 | www.777色| 一区二区三区四区免费看 | 人人爱天天做夜夜爽88 | 综合97| 欧美综合自拍亚洲综合百度 | 国产欧美日韩精品一区 | 日韩欧美国产精品第一页不卡 | 欧美日韩一区二区视频在线观看 | 欧美日韩国产综合一区二区三区 | 免费级毛片 | 国产精品一区二区三区四区 | 性欧美一区 | 免费性生活视频 | 黄网站在线播放 | 亚洲欧美视频一区二区 | 久久综合九色综合欧美9v777 | 亚洲精品久久 | 久久福利电影 |