Ajax en lui-même n'est pas une technologie, mais a été lancé par Jesse James Garrett en 2005 et décrit comme une « nouvelle » façon d'appliquer de nombreuses technologies existantes, notamment : HTML ou XHTML, feuilles de style en cascade, JavaScript, The Document. Modèle objet, XML, XSLT et surtout l'objet XMLHttpRequest.
Ne pas actualiser la page pour demander des données
De Le serveur obtient les données
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>
Le premier paramètre of open() est la méthode de requête HTTP – GET, POST, HEAD ou autres méthodes prises en charge par le serveur. Les noms de méthodes en majuscules sont des standards HTTP, sinon certains navigateurs (par exemple : Firefox) risquent de ne pas émettre la requête. Cliquez sur les spécifications du W3C pour plus d'informations sur les méthodes de requête http.
Le deuxième paramètre est l'url à demander. Pour des raisons de sécurité, les requêtes d'URL inter-domaines ne peuvent pas être effectuées par défaut. Assurez-vous que toutes les pages sont sous le même nom de domaine, sinon vous obtiendrez une erreur « autorisation refusée » lors de l'appel de la méthode open(). Un problème courant entre domaines est que le nom de domaine de votre site Web est domain.tld, mais que vous essayez d'accéder à la page en utilisant www.domain.tld. Si vous souhaitez vraiment effectuer des requêtes d'origine croisée, consultez le contrôle d'accès HTTP.
Le troisième paramètre facultatif définit si la requête est synchrone ou asynchrone. Si c'est vrai (valeur par défaut), JavaScript continuera à s'exécuter et le serveur renverra des données pendant que l'utilisateur exploite la page. C'est l'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 (non initialisé) ou (la requête n'est pas initialisée)
1 (chargement) ou (serveur établissant la connexion)
2 (chargé) ou (demande reçue)
3 (interactif) ou (exécuter la demande)
4 (complet) ou (demande terminée et la réponse est prêtedemande de réponse terminée en place)
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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!