Ajax selbst ist keine Technologie, sondern wurde 2005 von Jesse James Garrett entwickelt und als „neue“ Möglichkeit zur Anwendung vieler bestehender Technologien beschrieben, darunter: HTML oder XHTML, Cascading Style Sheets, JavaScript, The Document Objektmodell, XML, XSLT und vor allem das XMLHttpRequest-Objekt.
Seite nicht aktualisieren, um Daten anzufordern
Von: Der Server erhält die Daten
httpRequest.onreadystatechange = nameOfTheFunction;
<code>httpRequest.onreadystatechange = function(){<br> // Process the server response here.<br>};</code>
<code>httpRequest.open('GET', 'http://www.example.org/some.file', true);<br>httpRequest.send();</code>
Der erste Parameter von open() ist die HTTP-Anfragemethode – GET, POST, HEAD oder andere vom Server unterstützte Methoden. Methodennamen in Großbuchstaben sind HTTP-Standards, andernfalls stellen einige Browser (z. B. Firefox) die Anfrage möglicherweise nicht aus. Klicken Sie auf W3C-Spezifikationen, um weitere Informationen zu HTTP-Anfragemethoden zu erhalten.
Der zweite Parameter ist die anzufordernde URL. Aus Sicherheitsgründen können domänenübergreifende URL-Anfragen standardmäßig nicht gestellt werden. Stellen Sie sicher, dass sich alle Seiten unter demselben Domänennamen befinden. Andernfalls erhalten Sie beim Aufruf der open()-Methode die Fehlermeldung „Berechtigung verweigert“. Ein häufiges domänenübergreifendes Problem besteht darin, dass der Domänenname Ihrer Website domain.tld lautet, Sie jedoch versuchen, über www.domain.tld auf die Seite zuzugreifen. Wenn Sie wirklich Cross-Origin-Anfragen stellen möchten, schauen Sie sich die HTTP-Zugriffskontrolle an.
Der optionale dritte Parameter legt fest, ob die Anfrage synchron oder asynchron ist. Wenn es wahr ist (Standardwert), wird JavaScript weiterhin ausgeführt und der Server gibt Daten zurück, während der Benutzer die Seite betreibt. Das ist AJAX.
"name=value&anothername="+encodeURIComponent(myVar)+"&so=on"
httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
httpRequest.onreadystatechange = nameOfTheFunction;
<code>if (httpRequest.readyState === XMLHttpRequest.DONE) {<br> // Everything is good, the response was received.<br>} else {<br> // Not ready yet.<br>}</code>
0 (nicht initialisiert) oder (Anfrage ist nicht initialisiert)
1 (Laden) oder (Server stellt Verbindung her)
2 (geladen) oder (Anfrage erhalten)
3 (interaktiv) oder (Anfrage ausführen)
4 (vollständig) oder (Anfrage abgeschlossen und Antwort ist fertigAnfrage abgeschlossene Antwort vorhanden)
Value | State | Description |
0 | UNSENT | Client has been created. open() not called yet. |
1 | OPENED | open() has been called. |
2 | HEADERS_RECEIVED | send() has been called, and headers and status are available. |
3 | LOADING | Downloading; responseText holds partial data. |
4 | DONE | The operation is complete. |
<code>if (httpRequest.status === 200) {<br> // Perfect!<br>} else {<br> // There was a problem with the request.<br> // For example, the response may have a 404 (Not Found)<br> // or 500 (Internal Server Error) response code.<br>}</code>
httpRequest.responseText – 返回服务器响应字符串
httpRequest.responseXML – 返回服务器响应XMLDocument 对象 可以传递给JavaScript DOM 方法
<code><button id="ajaxButton" type="button">Make a request</button><br><br><script><br>(function() {<br> var httpRequest;<br> document.getElementById("ajaxButton").addEventListener('click', makeRequest);<br><br> function makeRequest() {<br> httpRequest = new XMLHttpRequest();<br><br> if (!httpRequest) {<br> alert('Giving up :( Cannot create an XMLHTTP instance');<br> return false;<br> }<br> httpRequest.onreadystatechange = alertContents;<br> httpRequest.open('GET', 'test.html');<br> httpRequest.send();<br> }<br><br> function alertContents() {<br> if (httpRequest.readyState === XMLHttpRequest.DONE) {<br> if (httpRequest.status === 200) {<br> alert(httpRequest.responseText);<br> } else {<br> alert('There was a problem with the request.');<br> }<br> }<br> }<br>})();<br></script></code>
用户点击"Make a request” 按钮;
事件调用 makeRequest() 方法;
请求发出,然后 (onreadystatechange)执行传递给 alertContents();
alertContents() 检查响应是否 OK, 然后 alert() test.html 文件内容。
<code>function alertContents() {<br> try {<br> if (httpRequest.readyState === XMLHttpRequest.DONE) {<br> if (httpRequest.status === 200) {<br> alert(httpRequest.responseText);<br> } else {<br> alert('There was a problem with the request.');<br> }<br> }<br> }<br> catch( e ) {<br> alert('Caught Exception: ' + e.description);<br> }<br>}</code>
<code><?xml version="1.0" ?><br><root><br> I'm a test.<br></root></code>
<code>...<br>onclick="makeRequest('test.xml')"><br>...</code>
<code>var xmldoc = httpRequest.responseXML;<br>var root_node = xmldoc.getElementsByTagName('root').item(0);<br>alert(root_node.firstChild.data);</code>
<code><label>Your name: <br> <input type="text" id="ajaxTextbox" /><br></label><br><span id="ajaxButton" style="cursor: pointer; text-decoration: underline"><br> Make a request<br></span></code>
<code> document.getElementById("ajaxButton").onclick = function() { <br> var userName = document.getElementById("ajaxTextbox").value;<br> makeRequest('test.php',userName); <br> };</code>
<code>function makeRequest(url, userName) {<br><br> ...<br><br> httpRequest.onreadystatechange = alertContents;<br> httpRequest.open('POST', url);<br> httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');<br> httpRequest.send('userName=' + encodeURIComponent(userName));<br> }</code>
<code>function alertContents() {<br> if (httpRequest.readyState === XMLHttpRequest.DONE) {<br> if (httpRequest.status === 200) {<br> var response = JSON.parse(httpRequest.responseText);<br> alert(response.computedString);<br> } else {<br> alert('There was a problem with the request.');<br> }<br> }<br>}</code>
<code>$name = (isset($_POST['userName'])) ? $_POST['userName'] : 'no name';<br>$computedString = "Hi, " . $name;<br>$array = ['userName' => $name, 'computedString' => $computedString];<br>echo json_encode($array);</code>
Das obige ist der detaillierte Inhalt vonWas ist Ajax? Eine ausführliche Einführung in Ajax. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!