PHP와 AJAX responseXML 예제
- 이전 페이지 AJAX 데이터베이스
- 다음 페이지 AJAX 라이브 검색
AJAX는 XML로 데이터베이스 정보를 반환할 수 있습니다.
AJAX Database 转 XML 예제 (테스트 설명:이 예제의 기능은 구현되지 않았습니다)
아래의 AJAX 예제에서는 웹페이지가 MySQL 데이터베이스에서 정보를 읽고, 데이터를 XML 문서로 변환하여 다른 곳에서 이 문서를 사용하여 정보를 표시하는 방법을 보여줍니다.
이 예제는 이전 장의 "PHP AJAX Database" 예제와 매우 유사하지만, 큰 차이점이 있습니다. 이 예제에서는 PHP 페이지에서 responseXML 함수를 사용하여 XML 형식의 데이터를 받습니다.
XML 문서를 응답으로 받아서 페이지의 여러 위치를 업데이트할 수 있게 합니다. 단순히 PHP 출력을 받아 표시하는 것만이 아닙니다.
이 예제에서는 데이터베이스에서 받은 정보를 사용하여 여러 <span> 요소를 업데이트할 것입니다。
드롭다운 목록에서 이름을 선택하십시오
이 열은 네 가지 요소로 구성되어 있습니다:
- MySQL 데이터베이스
- 간단한 HTML 양식
- JavaScript
- PHP 페이지
데이터베이스
이 예제에서 사용할 데이터베이스는 다음과 같이 보입니다:
id | 이름 | 성씨 | 연령 | 본고 | 직업 |
---|---|---|---|---|---|
1 | Peter | Griffin | 41 | Quahog | 酿造厂 |
2 | Lois | Griffin | 40 | Newport | 피아노 교사 |
3 | Joseph | Swanson | 39 | Quahog | 경찰관 |
4 | Glenn | Quagmire | 41 | Quahog | Pilot |
HTML 양식
위의 예제는 간단한 HTML 양식을 포함하고 있으며 JavaScript로의 링크가 있습니다:
<html> <head> <script src="responsexml.js"></script> </head> <body> <form> 사용자 선택: <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> <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" 이벤트로 trigged 됩니다.
다시 말해, 사용자가 드롭다운 목록에서 값을 변경할 때마다 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 문서로 데이터를 출력하십시오
- 이전 페이지 AJAX 데이터베이스
- 다음 페이지 AJAX 라이브 검색