php下的原生ajax请求

向右看齐 2024-04-03 07:12 161阅读 0赞

浏览器中为我们提供了一个JS对象XMLHttpRequet,它可以帮助我们发送HTTP请求,并接受服务端的响应。

意味着我们的浏览器不提交,通过JS就可以请求服务器。

ajax(Asynchronous Javascript And XML)其实就是通过XHR对象,执行HTTP请求。

1、创建XHR对象

  1. var xhr = new XMLHttpRequest(); //暂不考虑兼容

2、XHR的对象属性和方法

  1. 方法:
  2. open("get/post", url, true/false);
  3. //有参数则k=v&k1=v1这种形式
  4. send(null);
  5. 属性:
  6. //代表请求状态,不断变化,为4时,请求结束
  7. readyState
  8. //响应的内容
  9. responseText
  10. //响应的状态码200,403,404
  11. status
  12. //状态文字
  13. statusText
  14. 事件:
  15. //当readyState变化时会触发此事件
  16. onreadystatechange = function() {};

3、通过XHR对象发送get请求

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>ajax</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. </head>
  8. <body>
  9. <div id="box">
  10. <input type="text" name="con" value="" id="con" />
  11. </div>
  12. </body>
  13. <script type="text/javascript">
  14. var ipt = document.getElementById("con");
  15. ipt.onblur = function () {
  16. var con = this.value;
  17. //创建XHR对象
  18. var xhr = new XMLHttpRequest();
  19. //设置请求URL
  20. var url = "./ajax.php?con=" + con;
  21. //设置XHR对象readyState变化时响应函数
  22. xhr.onreadystatechange = function () {
  23. //readyState是请求的状态,为4表示请求结束
  24. if (xhr.readyState == 4) {
  25. //responseText服务器响应的内容
  26. alert("服务器响应数据:" + this.responseText);
  27. }
  28. };
  29. //打开链接
  30. xhr.open("get", url, true);
  31. //发送请求
  32. xhr.send(null);
  33. }
  34. </script>
  35. </html>

ajax.php如下:

  1. <?php
  2. $con = !empty($_GET['con']) ? trim($_GET['con']) : '没有数据';
  3. echo $con;

填入数据,当鼠标焦点离开input时,触发请求,弹出响应内容。

4、通过XHR对象发送post请求

(1)、open()第1参数为post

(2)、POST的参数以k=v&k1=v1&k2=v2的形式拼接,并用send()发送

(3)、必须要设置Content-Type为 application/x-www-form-urlencoded

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>ajax</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. </head>
  8. <body>
  9. <div id="box">
  10. <input type="text" name="name" value="" id="name" />
  11. <input type="password" name="pwd" value="" id="pwd" />
  12. <input type="submit" name="sub" value="提交" id="sub" />
  13. </div>
  14. </body>
  15. <script type="text/javascript">
  16. var sub = document.getElementById("sub");
  17. sub.onclick = function () {
  18. var name = document.getElementById("name").value;
  19. var pwd = document.getElementById("pwd").value;
  20. //创建XHR对象
  21. var xhr = new XMLHttpRequest();
  22. //设置请求URL
  23. var url = "./ajax.php";
  24. //设置XHR对象readyState变化时响应函数
  25. xhr.onreadystatechange = function () {
  26. //readyState是请求的状态,为4表示请求结束
  27. if (xhr.readyState == 4) {
  28. //responseText服务器响应的内容
  29. alert("服务器响应数据:" + this.responseText);
  30. }
  31. };
  32. //打开链接
  33. xhr.open("post", url, true);
  34. //设置请求头部
  35. xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  36. //发送请求
  37. xhr.send("name=" + name + "&pwd=" + pwd);
  38. }
  39. </script>
  40. </html>

ajax.php如下:

  1. <?php
  2. $name = !empty($_POST['name']) ? trim($_POST['name']) : '没有数据';
  3. $pwd = !empty($_POST['pwd']) ? trim($_POST['pwd']) : '没有数据';
  4. echo '用户名:', $name, '密码:', $pwd;

单击submit后发送post请求,弹出响应信息。

5、返回值json,html,text,xml

返回值只有两种text,和xml。不过text内容中可以是一段html或json结构的字符串。

(1)、返回json格式

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>ajax</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. </head>
  8. <body>
  9. <div id="box">
  10. <select id="city"></select>
  11. <input type="button" value="获取" id="get" />
  12. </div>
  13. </body>
  14. <script type="text/javascript">
  15. var get = document.getElementById("get");
  16. var city = document.getElementById("city");
  17. get.onclick = function () {
  18. //创建XHR对象
  19. var xhr = new XMLHttpRequest();
  20. //设置请求URL
  21. var url = "./ajax.php";
  22. //设置XHR对象readyState变化时响应函数
  23. xhr.onreadystatechange = function () {
  24. //readyState是请求的状态,为4表示请求结束
  25. if (xhr.readyState == 4) {
  26. //responseText服务器响应的内容
  27. //通过eval把传来的json字符串转成对象
  28. var data = eval(this.responseText);
  29. var str = "";
  30. for(var ix in data) {
  31. str += "<option value='" + data[ix].id + "'>" + data[ix].name + "</option>";
  32. }
  33. city.innerHTML = str;
  34. }
  35. };
  36. //打开链接
  37. xhr.open("get", url, true);
  38. //发送请求
  39. xhr.send(null);
  40. }
  41. </script>
  42. </html>

ajax.php如下:

  1. <?php
  2. $data = array(
  3. array('id' => 1, 'name' => '上海'),
  4. array('id' => 2, 'name' => '北京'),
  5. array('id' => 3, 'name' => '深圳'),
  6. );
  7. echo json_encode($data);

(2)、返回xml格式

xml通过responseXML来读取, responseXML不是字符串,是DOM对象。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>ajax</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. </head>
  8. <body>
  9. <div id="box">
  10. <div id="news"></div>
  11. <input type="button" value="获取" id="get" />
  12. </div>
  13. </body>
  14. <script type="text/javascript">
  15. var get = document.getElementById("get");
  16. var news = document.getElementById("news");
  17. get.onclick = function () {
  18. //创建XHR对象
  19. var xhr = new XMLHttpRequest();
  20. //设置请求URL
  21. var url = "./ajax.php";
  22. //设置XHR对象readyState变化时响应函数
  23. xhr.onreadystatechange = function () {
  24. //readyState是请求的状态,为4表示请求结束
  25. if (xhr.readyState == 4) {
  26. //responseXML服务器响应的内容
  27. var data = this.responseXML;
  28. var str = "";
  29. var title = data.getElementsByTagName("title");
  30. str += "<p>" + title[0].childNodes[0].nodeValue + "</p>";
  31. str += "<p>" + title[1].childNodes[0].nodeValue + "</p>";
  32. str += "<p>" + title[2].childNodes[0].nodeValue + "</p>";
  33. news.innerHTML = str;
  34. }
  35. };
  36. //打开链接
  37. xhr.open("get", url, true);
  38. //发送请求
  39. xhr.send(null);
  40. }
  41. </script>
  42. </html>

ajax.php如下:

  1. <?php
  2. header('Content-Type: text/xml;charset=utf-8');
  3. $xml = <<<EOD
  4. <?xml version="1.0" encoding="utf-8"?>
  5. <news>
  6. <title>111</title>
  7. <title>222</title>
  8. <title>333</title>
  9. </news>
  10. EOD;
  11. echo $xml;

6、ajax的同步与异步

通过设置open()的第三个参数true/false,来查看请求的效果。

同步请求:

发送请求->等待结果->操作完成->继续后面代码。我们必须等待结果处理完毕后才能继续后面的代码,严格按照步骤一步一步执行。

异步请求:

发送请求->继续后面代码->响应结果接收完毕->操作结果。异步请求在发送请求之后没有等待结果的返回而是继续执行后面的代码,也就是说在结果返回之前用户可以操作其他东西。

发表评论

表情:
评论列表 (有 0 条评论,161人围观)

还没有评论,来说两句吧...

相关阅读

    相关 php原生ajax请求

    浏览器中为我们提供了一个JS对象XMLHttpRequet,它可以帮助我们发送HTTP请求,并接受服务端的响应。 意味着我们的浏览器不提交,通过JS就可以请求服务器。 aj

    相关 原生JS Ajax请求

    传统方法的缺点: 传统的web交互是用户触发一个http请求服务器,然后服务器收到之后,在做出响应到用户,并且返回一个新的页面,每当服务器处理客户端提交的请求时,客户都只能

    相关 php原生ajax请求

    浏览器中为我们提供了一个JS对象XMLHttpRequet,它可以帮助我们发送HTTP请求,并接受服务端的响应。 意味着我们的浏览器不提交,通过JS就可以请求服务器。 ...