งานทางฝั่งเซิร์ฟเวอร์มักจะดำเนินการเชิงตรรกะตามคำขอของลูกค้าและส่งคืนการตอบกลับผลลัพธ์ การตอบสนองนี้มักจะอยู่ในรูปแบบ XML (ดังนั้นฝั่งเซิร์ฟเวอร์จำเป็นต้องใช้ DOM ของ PHP เพื่อสร้างการตอบสนอง XML)
1. PHP ใช้ DOM เพื่อสร้างการตอบสนอง XML ซึ่งแยกวิเคราะห์โดย JS ของไคลเอนต์แล้วแสดงบนเพจ (เช่น คุณต้องมีความเชี่ยวชาญใน DOM API ของ PHP)
จริงๆ แล้ว มีสองวิธีในการสร้าง XML ใน PHP:
ใช้ DOM API (วิธีที่ 1)
อีกวิธีหนึ่งคือการสะท้อนเนื้อหา XML โดยตรง (วิธีที่ 2)
ดูตัวอย่าง:
หน้า HTML (มีฟังก์ชันทริกเกอร์ JS สามฟังก์ชัน: onmouseover, onmouseout, onclick; ทริกเกอร์ฟังก์ชันของตัวเองตามลำดับ)
<หัว>
<ร่างกาย>
คำเริ่มต้น
ฟังก์ชัน createXmlHttpRequestObject()
-
var xmlHttp;
ลอง
-
// พยายามสร้างวัตถุ XMLHttpRequest
xmlHttp = XMLHttpRequest ใหม่();
-
จับ(จ)
-
// ถือว่า IE6 หรือเก่ากว่า
var XmlHttpVersions = อาร์เรย์ใหม่ ('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP');
สำหรับ (var i=0; i
พยายาม
-
// พยายามสร้างวัตถุ XMLHttpRequest
xmlHttp = ActiveXObject ใหม่ (XmlHttpVersions[i]);
-
จับ (จ) ...{}
-
-
ถ้า (!xmlHttp)
alert("เกิดข้อผิดพลาดในการสร้างวัตถุ XMLHttpRequest");
อื่น
กลับ xmlHttp;
-
//////2. ฟังก์ชันตอบสนองเหตุการณ์ JavaScript (ทริกเกอร์ onmouseover)
// อ่านไฟล์จากเซิร์ฟเวอร์
ฟังก์ชั่น PHPichoXML()
-
// ดำเนินการต่อหาก xmlHttp ไม่เป็นโมฆะเท่านั้น
ถ้า(xmlHttp)
-
// พยายามเชื่อมต่อกับเซิร์ฟเวอร์
พยายาม
-
//เริ่มอ่านไฟล์จากเซิร์ฟเวอร์
//ส่งคำขอแบบอะซิงโครนัสไปยังไฟล์ PHPechoXML.php ทางฝั่งเซิร์ฟเวอร์
xmlHttp.open("GET", "PHPechoXML.php", จริง);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send(null);
-
// แสดงข้อผิดพลาดในกรณีที่เกิดความล้มเหลว
จับ (จ)
-
alert("ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: " + e.toString());
-
-
}
///////3. ฟังก์ชันตอบสนองเหตุการณ์ JavaScript (ทริกเกอร์ onmouseout)
ฟังก์ชั่น PHPDOMXML()
-
// ดำเนินการต่อหาก xmlHttp ไม่เป็นโมฆะเท่านั้น
ถ้า(xmlHttp)
-
// พยายามเชื่อมต่อกับเซิร์ฟเวอร์
พยายาม
-
//เริ่มอ่านไฟล์จากเซิร์ฟเวอร์
//ส่งคำขอแบบอะซิงโครนัสไปยังไฟล์ PHPDOMXML.php ทางฝั่งเซิร์ฟเวอร์
xmlHttp.open("GET", "PHPDOMXML.php", จริง);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send(null);
-
// แสดงข้อผิดพลาดในกรณีที่เกิดความล้มเหลว
จับ (จ)
-
alert("ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: " + e.toString());
-
-
}
// จัดการการตอบสนองที่ได้รับจากเซิร์ฟเวอร์ ฟังก์ชันเรียกกลับสถานะฝั่งเซิร์ฟเวอร์
ฟังก์ชั่น handleRequestStateChange()
...{
ถ้า (xmlHttp.readyState == 4)
-
// ดำเนินการต่อเฉพาะในกรณีที่สถานะ HTTP เป็น "ตกลง"
ถ้า (xmlHttp.status == 200)
-
พยายาม
-
// อ่านข้อความจากเซิร์ฟเวอร์
var xmlResponse = xmlHttp.responseXML;
// บันทึกข้อผิดพลาดที่อาจเกิดขึ้นใน IE และ Opera
ถ้า(!xmlResponse||!xmlResponse.documentElement)
-
Throw("โครงสร้าง XML ไม่ถูกต้อง: "+xmlHttp.responseText);
-
//บันทึกข้อผิดพลาดที่อาจเกิดขึ้นใน FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
ถ้า(rootNodeName=="parsererror")
-
Throw("โครงสร้าง XML ไม่ถูกต้อง: "+xmlHttp.responseText);
}
//รับการตอบสนอง XML จากเซิร์ฟเวอร์ แยกวิเคราะห์ และแสดงบนหน้าเว็บ //////4. ฟังก์ชั่นตอบสนองเหตุการณ์ JavaScript (ทริกเกอร์ onclick) //รับค่าในรูปแบบ //ตั้งเป็นพารามิเตอร์เพื่อส่งคำขอแบบอะซิงโครนัสไปยัง CSparameter.php บนฝั่งเซิร์ฟเวอร์ // เริ่มอ่านไฟล์จากเซิร์ฟเวอร์ //ฟังก์ชันเรียกกลับเปลี่ยนสถานะเซิร์ฟเวอร์ (เซิร์ฟเวอร์ยอมรับพารามิเตอร์จากไคลเอนต์และส่งกลับการตอบสนอง XML หลังจากการคำนวณเชิงตรรกะ ไคลเอนต์แยกวิเคราะห์ XML และส่งคืนการอัปเดตไปยังเพจ) ถ้า (xmlHttp.readyState == 4) //รับองค์ประกอบเอกสารของ XML สคริปต์ PHP ฝั่งเซิร์ฟเวอร์ (รับผิดชอบในการยอมรับคำขออะซิงโครนัสจากไคลเอนต์ ตอบกลับ และส่งคืนไปยังไคลเอนต์ในรูปแบบ XML) echo '<เมือง>'; ?> PHPDOMXML.php (วิธีที่สองสำหรับ PHP ในการสร้างการตอบสนอง XML โดยใช้ DOM API ของ PHP เพื่อแสดงการตอบสนองในรูปแบบ XML) 2. การถ่ายโอนพารามิเตอร์ระหว่างฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์: //ยอมรับพารามิเตอร์ของคำขอแบบอะซิงโครนัสของไคลเอ็นต์ //ทำการคำนวณเชิงตรรกะ //สร้างการตอบกลับในรูปแบบ XML และส่งคืนไปยังไคลเอนต์ $resultTag=$dom->createElement('ผล'); $xmlString=$dom->saveXML(); ?> b) แต่หากตั้งค่า display_errors เป็นเปิด ข้อผิดพลาดจะปรากฏขึ้น แต่ข้อความแสดงข้อผิดพลาดจะไม่เป็นมิตร 4. การเข้าถึงฐานข้อมูลฝั่งเซิร์ฟเวอร์ <ใช้ MySQL เพื่อเข้าถึงข้อมูลเพื่อให้ได้ไดนามิกที่แท้จริง> 5. การห่อหุ้มและสถาปัตยกรรมโปรแกรม PHP ฝั่งเซิร์ฟเวอร์ (โปรแกรม PHP ฝั่งเซิร์ฟเวอร์แนะนำโหมดการออกแบบ) เป็นตัวอย่างของการแนะนำรูปแบบการออกแบบบนฝั่งเซิร์ฟเวอร์: (ออกแบบสถาปัตยกรรมโปรแกรมของสคริปต์ PHP ฝั่งเซิร์ฟเวอร์เพื่อเพิ่มความสามารถในการปรับขนาดและการนำกลับมาใช้ใหม่ได้) //แสดงการตอบสนองที่ถูกต้องจากเซิร์ฟเวอร์ไปยัง div พร้อมด้วย id ของ show ////////////////////////////////////////////// /// ///////////// หมายเหตุสุดท้าย: โครงสร้างโปรแกรมของสคริปต์ PHP ฝั่งเซิร์ฟเวอร์ (suggest.php เป็นฟังก์ชันการประมวลผลหลักบนฝั่งเซิร์ฟเวอร์ และยังมี Suggest.class.php, error_handler.php, config.php ฯลฯ) $action=$_GET['action']; $oSuggest=new แนะนำ(); //Constructor, ลิงก์ฐานข้อมูล $strOUT=''; ฟังก์ชั่น error_handler($errNo,$errStr,$errFile,$errLine) $error_message='ERRNO: '.$errNo.chr(10).'TEXT: '.$errStr.chr(10).'LOCATION: '.$errFile.' '.$errLine; 6. ความรู้เล็กน้อยเกี่ยวกับ PHP สำหรับการวิจัยในอนาคต:
//รับองค์ประกอบเอกสารของ XML
xmlRoot = xmlResponse.documentElement;
// รับอาร์เรย์ที่มีชื่อหนังสือและ ISBN
cityArray=xmlRoot.getElementsByTagName("เมือง");
//สร้างเอาต์พุต HTML
var html = "";
// วนซ้ำอาร์เรย์และสร้างโครงสร้าง HTML
สำหรับ (var i=0; i
";
// รับการอ้างอิงถึงองค์ประกอบ
myDiv = document.getElementById("show");
// แสดงเอาต์พุต HTML
myDiv.innerHTML = "เซิร์ฟเวอร์แจ้งว่า:
" + html;
-
จับ(จ)
-
//แสดงข้อความแสดงข้อผิดพลาด
alert("เกิดข้อผิดพลาดในการอ่านคำตอบ: " + e.toString());
-
-
อื่น
-
// แสดงข้อความสถานะ
alert("เกิดปัญหาในการดึงข้อมูล: " +
xmlHttp.statusText);
-
-
-
ฟังก์ชั่น CSparameter()
-
// ดำเนินการต่อหาก xmlHttp ไม่เป็นโมฆะเท่านั้น
ถ้า(xmlHttp)
-
// พยายามเชื่อมต่อกับเซิร์ฟเวอร์
พยายาม
...{
var firstNumber=document.getElementById("firstNumber").value;
var SecondNumber=document.getElementById("secondNumber").value;
var param="firstNumber="+firstNumber+"&secondNumber="+secondNumber;
xmlHttp.open("GET", "CSparameter.php?"+พารามิเตอร์, จริง);
xmlHttp.onreadystatechange = handleRequestStateChangePara;
xmlHttp.send(null);
-
// แสดงข้อผิดพลาดในกรณีที่เกิดความล้มเหลว
จับ (จ)
-
alert("ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: " + e.toString());
-
-
}
// จัดการการตอบสนองที่ได้รับจากเซิร์ฟเวอร์
ฟังก์ชั่น handleRequestStateChangePara()
...{
-
// ดำเนินการต่อเฉพาะในกรณีที่สถานะ HTTP เป็น "ตกลง"
ถ้า (xmlHttp.status == 200)
-
พยายาม
-
// อ่านข้อความจากเซิร์ฟเวอร์
var xmlResponse = xmlHttp.responseXML;
//บันทึกข้อผิดพลาดที่อาจเกิดขึ้นใน IE และ Opera
ถ้า(!xmlResponse||!xmlResponse.documentElement)
-
Throw("โครงสร้าง XML ไม่ถูกต้อง: "+xmlHttp.responseText);
-
//บันทึกข้อผิดพลาดที่อาจเกิดขึ้นใน FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
ถ้า(rootNodeName=="parsererror")
-
Throw("โครงสร้าง XML ไม่ถูกต้อง: "+xmlHttp.responseText);
}
xmlRoot = xmlResponse.documentElement;
cityArray=xmlRoot.getElementsByTagName("ผลลัพธ์");
//สร้างเอาต์พุต HTML
var html = "";
// วนซ้ำอาร์เรย์และสร้างโครงสร้าง HTML
สำหรับ (var i=0; i
";
// รับการอ้างอิงถึงองค์ประกอบ
myDiv = document.getElementById("ผลลัพธ์");
// แสดงเอาต์พุต HTML
myDiv.innerHTML = "เซิร์ฟเวอร์แจ้งว่า:
" + html;
-
จับ(จ)
-
//แสดงข้อความแสดงข้อผิดพลาด
alert("เกิดข้อผิดพลาดในการอ่านคำตอบ: " + e.toString());
-
-
อื่น
-
// แสดงข้อความสถานะ
alert("เกิดปัญหาในการดึงข้อมูล: " +
xmlHttp.statusText);
-
-
}
PHEchoXML.php (วิธีแรกสำหรับ PHP ในการสร้างการตอบสนอง XML, echo เอาท์พุตเนื้อหา XML)
//วิธีแรกสำหรับ PHP ฝั่งเซิร์ฟเวอร์ในการสร้างไฟล์ XML คือการสะท้อน XML โดยตรง
header('ประเภทเนื้อหา: text/xml');
//สร้างส่วนหัว XML
echo '';
$cityArray=array('ปารีส','ลอนดอน','นิวยอร์ก','ปักกิ่ง','โตเกียว');
foreach ($เมือง Array เป็น $เมือง)
-
echo '<เมือง>'.$เมือง'เมือง>';
-
echo '';
header('ประเภทเนื้อหา: text/xml');
$cityArray=array('เซี่ยงไฮ้','ปักกิ่ง','ซานซี','ซานตง');
//สร้างเอกสาร XML
$dom=ใหม่ DOMDocument();
//แท็กด้านนอกสุด
$cityTag=$dom->createElement('เมือง');
$dom->ผนวกเด็ก($เมืองTag);
//แท็กภายในสามารถสร้างขึ้นได้โดยการวนซ้ำ
foreach ($เมือง Array เป็น $เมือง)
-
$cityTag=$dom->createElement('เมือง');
$cityName=$dom->createTextNode($เมือง);
$cityTag->ผนวกเด็ก($ชื่อเมือง);
$cityTag->ผนวกChild($cityTag);
-
//บันทึกโครงสร้าง XML เป็นสตริงแล้วส่งออก
$xmlString=$dom->saveXML();
เสียงสะท้อน $xmlString;
?>
อาจมีแบบฟอร์มในหน้าเว็บฝั่งไคลเอ็นต์ เพื่อให้สามารถส่งพารามิเตอร์ไปยังฝั่งเซิร์ฟเวอร์
ดูตัวอย่าง:
เช่นเดียวกับในข้อ 1 สคริปต์ฝั่ง PHP สำหรับการส่งพารามิเตอร์จะเป็นดังนี้ CSparameter.php (ยอมรับพารามิเตอร์ของคำขอแบบอะซิงโครนัสของแบบฟอร์มไคลเอนต์ ดำเนินการประมวลผลเชิงตรรกะ และสร้างการตอบสนอง XML เพื่อส่งกลับไปยังไคลเอนต์) //ปรับแต่งฟังก์ชั่นการจัดการข้อผิดพลาดทางฝั่งเซิร์ฟเวอร์
need_once('error_handler.php');
header('Content-Type: text/xml');
$firstNumber=$_GET['firstNumber'];
$secondNumber=$_GET['secondNumber'];
$result=$firstNumber/$secondNumber;
$dom=ใหม่ DOMDocument();
$resultsTag=$dom->createElement('ผลลัพธ์');
$dom->appendChild($resultsTag);
$resultText=$dom->createTextNode($ผล);
$resultTag->ผนวกเด็ก($resultText);
$resultsTag->appendChild($resultTag);
เสียงสะท้อน $xmlString;
3. การจัดการข้อยกเว้นข้อผิดพลาดในฝั่ง PHP (ข้อผิดพลาดหรือข้อยกเว้นที่กล่าวถึงในที่นี้อ้างถึงข้อผิดพลาดเชิงตรรกะ):
ก) ตามค่าเริ่มต้น PHP จะไม่ส่งข้อยกเว้นเมื่อมีข้อผิดพลาดหรือข้อยกเว้นเกิดขึ้น (เนื่องจากค่าเริ่มต้น display_errors ใน php.ini ถูกตั้งค่าเป็นปิด และข้อผิดพลาดจะถูกบันทึกไว้ในบันทึกบันทึกข้อผิดพลาดของ Apache) ดังนั้นจึงเป็น เขียนยากที่จะแก้ไข <มักจะเป็นเรื่องยากที่จะค้นหาข้อผิดพลาดที่แสดงโดยเบราว์เซอร์>
http://www.downcodes.com/
c) คุณสามารถเขียนฟังก์ชันการจัดการข้อยกเว้นข้อผิดพลาด PHP ของคุณเองได้ (display_errors ไม่จำเป็นต้องเปิด) เพื่อแสดงข้อผิดพลาดในลักษณะที่ชัดเจนเพื่อการดีบักที่ง่ายดาย
โดยปกติแล้วคุณจะเขียนฟังก์ชันการจัดการข้อยกเว้นของคุณเองดังนี้:
แสดงฟังก์ชันโยนข้อยกเว้นข้อผิดพลาดฝั่งเซิร์ฟเวอร์ที่กำหนดไว้ error_handler.php (สามารถนำมาใช้ซ้ำได้อย่างง่ายดายในโปรแกรม PHP)
//ตั้งค่าฟังก์ชันตัวจัดการข้อผิดพลาดที่ผู้ใช้กำหนด วิธีการจัดการข้อยกเว้นข้อผิดพลาดที่ผู้ใช้กำหนด
set_error_handler('error_handler', E_ALL);
ฟังก์ชั่น error_handler($errNo,$errStr,$errFile,$errLine)
-
//หากบัฟเฟอร์เอาท์พุตไม่ว่างเปล่า ให้ล้างข้อมูลนั้น
ถ้า(ob_get_length()) ob_clean();
//กำหนดเอาต์พุตที่กำหนดเอง
$error_message='ERRNO: '.$errNo.chr(10).'TEXT: '.$errStr.chr(10).'LOCATION: '.$errFile.', Line'.$errLine;
เสียงสะท้อน $error_message;
ออก;
-
?>
นี่เป็นคลาสสิกอยู่แล้ว คุณสามารถใช้ MySQL, MSSQL, Oracle และอื่น ๆ ได้
a) เปิดฐานข้อมูล b) คำสั่ง SQL Query c) ปิดฐานข้อมูล
a) appname.php <ยอมรับคำขอของลูกค้า>
b) appname.class.php <สรุปตรรกะฝั่งเซิร์ฟเวอร์ การดำเนินการฐานข้อมูล การจัดการข้อผิดพลาด ฯลฯ ลงในคลาส รวมถึงคุณลักษณะ วิธีการ ตัวสร้าง และตัวทำลาย>
ค) config.php
d) error_handler.php
โปรแกรมแนะนำคำหลักง่ายๆ: (รวมถึง index.html, css/style.css, js.js และโค้ด PHP php/suggest.php, Suggest.class.php, error_handler.php, config.php รองรับฐานข้อมูล)
index.html(css/style.css, js.js; โปรดทราบว่าเหตุการณ์ไคลเอนต์ JS สองเหตุการณ์ทริกเกอร์ onkeyup, onclick)
onkeyup ส่งคำขอไปยังเซิร์ฟเวอร์แบบอะซิงโครนัสแบบเรียลไทม์เมื่อผู้ใช้ป้อนข้อมูลและเซิร์ฟเวอร์ตอบสนอง onclick ส่งคำขอไปยังเซิร์ฟเวอร์เมื่อผู้ใช้คลิกค้นหา
<หัว>
หัว>
<ร่างกาย>
<โนสคริปท์>
ตัวอย่างนี้ต้องการเบราว์เซอร์ที่เปิดใช้งาน JavaScript!
<ระดับ div="โครงการ">
ยินดีต้อนรับสู่รูปแบบการออกแบบ PHP AJAX (คำหลักแนะนำ DEMO)
แนะนำคำสำคัญ:
ร่างกาย>
css/style.css
ร่างกาย
-
ตระกูลฟอนต์: Arial;
ขนาดตัวอักษร: เล็ก;
สีพื้นหลัง: #fff;
-
.ชื่อ
-
ขนาดตัวอักษร:x-ใหญ่;
-
div.โครงการ
-
สีพื้นหลัง: #99ccff;
ช่องว่างภายใน:5px;
เส้นขอบ:#000099 1px ทึบ;
-
div.ข่าว
-
สีพื้นหลัง:#fffbb8;
ช่องว่างภายใน:2px;
เส้นขอบ: 1px ประ;
-
#แสดง
-
สี: #008000;
รูปแบบตัวอักษร: ตัวเอียง;
}js.js (กำหนดฟังก์ชันตอบกลับใน JS และฟังก์ชันโทรกลับเพื่อให้ไคลเอ็นต์ประมวลผลการตอบสนองของเซิร์ฟเวอร์)
//////////////////////////////////////////////// ///////////////
//1. สร้างวัตถุ XMLHttpRequest
//////////////////////////////////////////////// ///////////////
var xmlHttp = createXmlHttpRequestObject();
ฟังก์ชั่น createXmlHttpRequestObject()
-
var xmlHttp;
พยายาม
-
// พยายามสร้างวัตถุ XMLHttpRequest
xmlHttp = XMLHttpRequest ใหม่();
-
จับ(จ)
-
// ถือว่า IE6 หรือเก่ากว่า
var XmlHttpVersions = อาร์เรย์ใหม่ ('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP');
สำหรับ (var i=0; i
พยายาม
-
// พยายามสร้างวัตถุ XMLHttpRequest
xmlHttp = ActiveXObject ใหม่ (XmlHttpVersions[i]);
-
จับ (จ) ...{}
-
-
ถ้า (!xmlHttp)
alert("เกิดข้อผิดพลาดในการสร้างวัตถุ XMLHttpRequest");
อื่น
กลับ xmlHttp;
}
จอแสดงผลฟังก์ชั่น (ข้อความ)
-
showDIV=document.getElementById("แสดง");
showDIV.innerHTML=ข้อความ;
-
//แสดงข้อความแสดงข้อผิดพลาดของการตอบกลับฝั่งเซิร์ฟเวอร์ต่อ div ด้วยรหัสแสดง
ฟังก์ชั่นแสดงข้อผิดพลาด (ข้อความแสดงข้อผิดพลาด)
-
//แสดงข้อความแสดงข้อผิดพลาด
display("เกิดข้อผิดพลาดในการเรียกข้อความใหม่!
"+ข้อความแสดงข้อผิดพลาด);
}
//2. ฟังก์ชันที่ขับเคลื่อนด้วยเหตุการณ์ (ฟังก์ชันคีย์อัพ)
//////////////////////////////////////////////// ///////////////
var keyupAddress="php/suggest.php?action=keyup&keyword=";
ฟังก์ชั่นคีย์อัพ ()
-
ถ้า(xmlHttp)
-
//ส่งคำขอแบบอะซิงโครนัสเมื่อเซิร์ฟเวอร์ไม่ยุ่ง
ถ้า(xmlHttp.readyState==0||xmlHttp.readyState==4)
-
พยายาม
-
var keyword=document.getElementById("คำหลัก").value;
//ทำการร้องขอแบบอะซิงโครนัส
xmlHttp.open("GET",keyupAddress+คีย์เวิร์ด,จริง);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.send(null);
-
จับ(จ)
-
displayError(e.toString);
-
-
-
-
//////////////////////////////////////////////// ///////////////
//3. ฟังก์ชัน Callback ฟังก์ชันนี้จะเริ่มทำงานเมื่อสถานะการตอบสนองของเซิร์ฟเวอร์เปลี่ยนไป
//////////////////////////////////////////////// ///////////////
ฟังก์ชั่นจัดการพร้อมสถานะการเปลี่ยนแปลง ()
-
ถ้า(xmlHttp.readyState==4)
-
ถ้า(xmlHttp.status==200)
-
พยายาม
-
// รับการตอบกลับของเซิร์ฟเวอร์
var xmlResponse = xmlHttp.responseXML;
SuggestArray=xmlResponse.getElementsByTagName("แนะนำ");
var showText="";
สำหรับ (var i=0;i
var textNodes=suggestArray[i].getElementsByTagName("ข้อความ");
var timesNodes=suggestArray[i].getElementsByTagName("ครั้ง");
สำหรับ (var j=0;j
showText+=textNodes[j].childNodes[0].nodeValue+" ("+timesNodes[j].childNodes[0].nodeValue+")
";
-
-
//แสดงการตอบกลับไปยังเพจ
จอแสดงผล (showText);
-
จับ(จ)
-
displayError(e.toString());
-
-
-
-
//////////////////////////////////////////////// ///////////////
//2. ฟังก์ชั่นที่ขับเคลื่อนด้วยเหตุการณ์ (ฟังก์ชั่นการค้นหา)
//////////////////////////////////////////////// ///////////////
var searchAddress="php/suggest.php?action=search&keyword=";
ค้นหาฟังก์ชั่น ()
-
ถ้า(xmlHttp)
-
//ส่งคำขอแบบอะซิงโครนัสเมื่อเซิร์ฟเวอร์ไม่ยุ่ง
ถ้า(xmlHttp.readyState==0||xmlHttp.readyState==4)
-
พยายาม
-
var keyword=document.getElementById("คำหลัก").value;
//ทำการร้องขอแบบอะซิงโครนัส
xmlHttp.open("GET",searchAddress+keyword,true);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.send(null);
-
จับ(จ)
-
displayError(e.toString);
-
-
-
}
Suggest.php (รับพารามิเตอร์ของไคลเอนต์ และเรียกใช้สองวิธีของคลาสการแนะนำเพื่อสร้างการตอบกลับในรูปแบบ XML และส่งกลับไปยังไคลเอนต์)
need_once('suggest.class.php');
header('ประเภทเนื้อหา: text/xml');
//ตรวจสอบให้แน่ใจว่าเบราว์เซอร์ของผู้ใช้จะไม่แคชผลลัพธ์
header('หมดอายุ: พุธ 23 ธ.ค. 1980 00:30:00 GMT');
header('แก้ไขล่าสุด: '.gmdate('D, d MYH:i:s').' GMT' );
header('การควบคุมแคช: ไม่มีแคช, ต้องตรวจสอบใหม่');
header('Pragma: ไม่มีแคช');
$keyword=$_GET['keyword'];
ถ้า($action=='keyup'&&$keyword!='')
-
$suggestXML=$oSuggest->getSuggests($คำหลัก);
-
if($action=='search'&&$keyword!='')
-
$suggestXML=$oSuggest->submitKeyword($keyword);
-
เสียงสะท้อน $suggestXML;
?>แนะนำคลาส.php คลาส
need_once('error_handler.php');
need_once('config.php');
ชั้นเรียนแนะนำ
-
//ตัวแปรสมาชิก
$conn;
ฟังก์ชั่น__สร้าง()
-
$นี่->conn=ใหม่ mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
ถ้า (mysqli_connect_errno()) {
printf("การเชื่อมต่อล้มเหลว: %s ", mysqli_connect_error());
ออก();
-
-
//Destructor ยกเลิกการเชื่อมต่อฐานข้อมูล
ฟังก์ชั่น __ ทำลาย ()
-
$นี่->conn->ปิด();
-
//getSuggests ฟังก์ชันสมาชิก (ฟังก์ชันนี้ตอบสนองต่อการกระทำฝั่งไคลเอ็นต์เป็นหลัก=keyup นั่นคือคำขอแบบอะซิงโครนัสเมื่อผู้ใช้กำลังพิมพ์)
ฟังก์ชั่นสาธารณะ getSuggests($keyword)
-
//สร้างข้อเสนอแนะ (สร้างคีย์เวิร์ดในฐานข้อมูลที่เหมือนกับครึ่งแรกของคีย์เวิร์ดที่ป้อน)
$suggest_query='select * จากคีย์เวิร์ดโดยที่คีย์เวิร์ดเช่น ''.$keyword.'%' เรียงลำดับตามเวลา desc Limit 5';
$suggest_result=$this->conn->query($suggest_query);
$suggest_num=$suggest_result->num_rows;
ถ้า($แนะนำ_num==0)
-
//$strOUT=$strOUT.'
-
อื่น
-
$strOUT=$strOUT"<แนะนำ>";
สำหรับ($i=0;$i<$suggest_num;$i++)
-
$suggest_row = $suggest_result->fetch_row();
$strOUT=$strOUT.'
-
$strOUT=$strOUT.'';
-
กลับ $strOUT;
-
//submitKeyword ฟังก์ชั่นสมาชิก (ฟังก์ชั่นนี้ส่วนใหญ่ตอบสนองต่อการกระทำฝั่งไคลเอ็นต์=การค้นหา นั่นคือคำขอแบบอะซิงโครนัสเมื่อผู้ใช้คลิกค้นหา)
ฟังก์ชั่นสาธารณะ sendKeyword($keyword)
-
$select_query='select * จากคำหลักโดยที่ keyword=''.$keyword.''';
$select_result=$this->conn->query($select_query);
$select_num=$select_result->num_rows;
//เพิ่มคีย์เวิร์ดใหม่ลงในฐานข้อมูลเมื่อพบคีย์เวิร์ด และเพิ่มจำนวนคีย์เวิร์ดที่มีอยู่เมื่อพบคีย์เวิร์ด
$strOUT='';
//มีอยู่แล้ว เพิ่มจำนวนครั้ง
ถ้า($select_num!=0)
-
$select_row = $select_result->fetch_row();
$times_now=$select_row[2];
$times_now=$times_now+1;
$update_query='update keyword set times ='.$times_now.' โดยที่ keyword=''.$keyword.''';
$update_result=$this->conn->query($update_query);
$strOUT=$strOUT.'
-
อื่น
-
//ไม่มีการแทรกบันทึก
$insert_query='insert into your keywords(คำหลัก, ครั้ง) ค่า(''.$keyword.'',1)';
$insert_result=$this->conn->query($insert_query);
$strOUT=$strOUT.'
-
กลับ $strOUT;
-
-
-
สองฟังก์ชันสุดท้าย config.php บันทึกข้อมูลการกำหนดค่าแอปพลิเคชัน (เช่นข้อมูลการกำหนดค่าฐานข้อมูล)
กำหนด('DB_HOST', 'localhost');
กำหนด('DB_USER','phpajaxuser');
กำหนด('DB_PASSWORD','phpajaxuser');
กำหนด('DB_DATABASE','phpajax');
-
error_handler.php บันทึกการจัดการข้อยกเว้นแบบกำหนดเอง
//ตั้งค่าฟังก์ชันการจัดการข้อผิดพลาดที่ผู้ใช้กำหนด
set_error_handler('error_handler', E_ALL);
-
if(ob_get_length()) ob_clean();
เสียงสะท้อน $error_message;
ออก;
-
?>สุดท้าย คำสั่ง sql จำเป็นในการเพิ่มฐานข้อมูลเพื่อบันทึกคำหลักลงในฐานข้อมูล
สร้างตาราง `คำหลัก` (
`id` int(10) ไม่ได้ลงนาม ไม่เป็นโมฆะ การเพิ่มอัตโนมัติ
`คำหลัก` varchar(32) ไม่ใช่ค่าเริ่มต้นที่เป็นโมฆะ '',
`times` int(10) ไม่ได้ลงนาม ไม่เป็นค่าเริ่มต้น '0'
คีย์หลัก (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;
วิธีที่ PHP อ่านข้อมูลจากเซิร์ฟเวอร์ระยะไกล (ค่อนข้างคล้ายกับการรวบรวมข้อมูลเว็บ):
file_get_contents;
หรือ CURL