原生ajax异步请求基础知识

一、同步交互与异步交互的概念:

* 同步交互:客户端向服务器端发送请求,到服务器端进行响应,这个过程中,用户不能做任何其他事情(只能等待响应完才能继续其他请求).

* 异步交互:客户端向服务器端发送请求,直到服务器端进行响应,这个过程中,用户可以做其他任何事情(不等);

同步与异步的区别:

* 同步交互

1、执行速度相对比较慢

2、响应的是完整的HTML页面

* 异步交互

1、 执行速度相对比较快

2、 响应的是部分数据

二、AJAX的概念:(Asynchronous JavaScript and Xml)--直译中文 - javascript和XML的异步

(简单理解-->就是客户端与服务器端进行交互,而无需刷新当前页面的技术,称之为Ajax)

* Ajax实现的是B/S架构下的异步交互

* 实现异步交互的技术-- <iframe src="">元素

* Ajax具有核心对象-- XMLHttpRequest对象

三、实现Ajax的步骤

* 创建XMLHttpRequest对象

* 注册监听

* 建立连接

* 发送请求

实现Ajax的六步是什么?(不标准)

* 创建XMLHttpRequest对象

* 建立连接

* 发送请求

* 注册监听 - onreadystatechange事件

* 获取服务器端的通信状态 - readyState

* 获取服务器端的状态码

1、创建XMLHttpRequest对象的语法:

function getXhr()

{

// 声明XMLHttpRequest对象

var xhr = null;

// 根据浏览器的不同情况进行创建

if(window.XMLHttpRequest)

{// 表示除IE外的其他浏览器

xhr = new XMLHttpRequest();

}else{ // 表示IE浏览器下创建

xhr = new ActiveXObject(‘Microsoft.XMLHttp‘);

}

return xhr;

}

// 调用getXhr()

var xhr = getXhr();

2、建立连接:

* 使用XMLHttpRequest对象的open(method,url)方法

* 作用 - 与服务器端建立连接

*参数含义:

* method - 设置当前请求的类型get/post

* url - 设置当前请求的地址

3、向服务器端发送请求:

*使用XMLHttpRequest对象的send(请求参数)方法:

* 请求参数的格式 - key=value

注意:* GET与POST的区别

* GET请求类型

* send()方法不起作用,但是不能被省略;语法:xhr.send(null);

* 请求参数 -在url后面写?key=value

* POST请求类型

* send()方法起作用,在send()方法被调用前,使用setRequestHeader()方法设置请求头信息

xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

4、注册监听:

* onreadystatechange事件

* 作用 - 监听服务器端的通信状态改变

xhr.onreadystatechange=function()

{

}

5、获取服务器端的通信状态:

*使用核心对象属性readyState、status

readyState - 表示当前服务器端的通信状态

* 0 - (服务器端)尚未初始化

* 1 - (服务器端)正在接收

* 2 - (服务器端)接收完毕

* 3 - (服务器端)正在响应

* 4 - (服务器端)响应完毕

* status --表示当前服务器端的状态码

* 200 - 请求成功

* 404 - 网页找不到(请求路径不正确)

* 500 - 服务器端错误

if(xhr.readyState==4&&xhr.status==200)

{

}

6、获取响应数据:

使用XMLHttpRequest对象的responseText属性,接收服务器端的响应数据;

var data=xhr.responseText;

4~6步就是接收服务器端响应数据的步骤:

* 使用XMLHttpRequest对象的onreadystatechange事件,监听服务器端的通信状态

* 使用XMLHttpRequest对象的readyState属性,判断服务器端的当前状态(4--响应完毕)

* 使用XMLHttpRequest对象的status属性,判断服务器端的状态码(200--表示请求成功)

* 使用XMLHttpRequest对象的responseText属性,接收服务器端的响应数据

demo:(这里省份也可以放在服务器端,通过 window.onload=function(){}在页面加载完后请求服务器关于省份的信息,方法步骤按照上面的4大步写就行)

 1 <!doctype html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>ajax02_二级联动</title>
 6 </head>
 7 <body>
 8     <form>
 9         <select id="province">
10             <option>请选择</option>
11         </select>
12         <select  id="city">
13             <option>请选择</option>
14         </select>
15     </form>
16     <script>
17          var  se_province=document.getElementById("province");
18          var  Pro_city=document.getElementById("city");
19             //加载页面后显示省份列表内容
20          window.onload=function(){
21             var option=province.getElementsByTagName("option");
22             var arrayProvice=["北京市","广东省","四川省","湖南省","云南省"];
23             for(var i=0 ;i<arrayProvice.length;i++)
24             {   //新建option标签
25                 var option=document.createElement("option");
26                 //把数组内容放入option里面
27                 var textNode=document.createTextNode(arrayProvice[i]);
28                 option.appendChild(textNode);
29                 //给select标签添加option
30                 se_province.appendChild(option);
31             }
32         }
33
34         se_province.onchange=function(){
35              //先为city元素的option文本内容情况,防止在多次触发onchange事件时出现城市列表重复添加
36                var opts=Pro_city.getElementsByTagName("option");
37                //console.log(opts);
38                for(var j=opts.length-1;j>0;j--)
39                {
40                    Pro_city.removeChild(opts[j]);
41                }
42             //alert(se_province.value);
43
44             //判断:如果省份value值是请选择就不会向服务器发送请求,避免生成多余的option标签
45             if(se_province.value !="请选择"){
46             //执行ajax异步请求
47             var xhr=getXhr();
48             xhr.open("post","ajax02.php",true);
49             xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
50             xhr.send("provcince="+se_province.value);
51             xhr.onreadystatechange=function(){
52                 if(xhr.readyState==4&&xhr.status==200)
53                     //接收服务器端的数据内容
54                    var data=xhr.responseText;//这里data是字符串
55                    var citydata=data.split(",");//截断字符串变成数组
56                     //console.log(data);
57
58                    for(var i=0;i<citydata.length;i++){
59                    //新建option标签
60                    var option=document.createElement("option");
61                    //把数组内容放入option里面
62                    var textNode=document.createTextNode(citydata[i]);
63                    option.appendChild(textNode);
64                   //给select标签添加option
65                    Pro_city.appendChild(option);
66
67                    }
68             }
69           }
70
71         }
72
73         //创建XMLHTTPRequest对象, XMLHttpRequest 用于在后台与服务器交换数据
74       function getXhr(){
75           var xmlhttp;
76           if(window.XMLHttpRequest){
77               xmlhttp=new XMLHttpRequest();
78           }else{
79               xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
80           }
81           return xmlhttp;
82       }
83 </script>
84 </body>
85 </html>

ajax02.php文件代码:

<?php
  //接收客户端发送的省份信息
  $province=$_POST["provcince"];

     switch($province){
        case "北京市":echo "朝阳区,海淀区,通州区,怀柔区";
        break;
        case "广东省":echo "深圳市,东莞市,广州市,佛山市";
        break;
        case "湖南省":echo "长沙市,湘潭市,邵阳市,岳阳市";
        break;
        case "四川省":echo "成都市,南充市,绵阳市,广元市";
        break;
        case "云南省":echo "昆明市,曲靖市,玉溪市,楚雄市";
        break;
             }
?>

<PS:转载请注明出处!>

时间: 2024-12-17 18:43:04

原生ajax异步请求基础知识的相关文章

黑马eesy_15 Vue:vue语法和生命周期与ajax异步请求

自学Java后端开发,发现14 微服务电商[乐优商城]实战项目,在介绍完SpringCloud后就要肝前端基础知识ES6和Vue. 所以本篇入门Vue练习记录的过程,目的是供自学后端Java遇到Vue使用需求的时候加强一下Vue基本使用的能力. vue语法和生命周期与ajax异步请求 1.Vue的快速入门2.Vue的语法 插值表达式 事件的绑定 数据的显示 逻辑判断和循环输出3.Vue的生命周期 8个生命周期的执行点 4个基本的 4个特殊的4.axios的ajax异步请求 它和jquery的aj

ajax异步请求302

我们知道,只有请求成功ajax才会进行回调处理,具体状态码为 status >= 200 && status < 300 || status === 304; 这一点通过查看JQuery的源码就可以证实. // Cache response headers responseHeadersString = headers || ""; // Set readyState jqXHR.readyState = status > 0 ? 4 : 0; //

原生ajax的请求过程

原生ajax的请求过程 创建全平台兼容的XMLHttpRequest对象: function getXHR(){ var xhr = null; if(window.XMLHttpRequest) {// 兼容 IE7+, Firefox, Chrome, Opera, Safari xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { xhr = new ActiveXObject("Msxml2.XMLHTT

黑马eesy_15 Vue:03.生命周期与ajax异步请求&amp;&amp;04.vue案例

黑马eesy_15 Vue:02.常用语法 vue的生命周期与ajax异步请求 1.Vue的快速入门2.Vue的语法 插值表达式 事件的绑定 数据的显示 逻辑判断和循环输出3.Vue的生命周期 8个生命周期的执行点 4个基本的 4个特殊的4.axios的ajax异步请求 它和jquery的ajax比较相似 5.综合案例    实现用户的查询列表和更新操作        前端:Vue        后端:ssm 3.VueJS生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程. v

ajax 异步请求四个步骤

ajax异步请求详解 ajxa定义:异步的JavaScript和xml 1.XMLHttpRequst的出现才有了异步处理 2.创建XmlHttpRequest对象 var request=new XMLHttpRequest(); 注意:如果要兼容IE6以下浏览器则需要编写如下代码 var request; if(window.XMLRequest){ request=new XMLRequestHttpRequest();  //IE7.IE8.360等 }else{ request=new

如何使用angularjs实现ajax异步请求

Sample.html <!DOCTYPE html> <html ng-app="myApp"> <head> <title>form</title> <script type="text/javascript" src="js/angular.min.js"></script> </head> <body> <form name=

MVC的Ajax异步请求

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @using (Ajax.BeginForm("GetTime","order",new AjaxOptions()           {               Confirm="你确认这么做吗?",               HttpMethod="post",               OnSuccess

MVC&amp;WebFomr对照学习:ajax异步请求

写在前面:由于工作需要,本人刚接触asp.net mvc,虽然webform的项目干过几个.但是也不是很精通.抛开asp.net webform和asp.net mvc的各自优劣和诸多差异先不说.我认为虽然mvc和webform有诸多不同,但是也只是为了达到相同的目的而在各自的机制下采取了不同的手段而已.更何况它们都是基于asp.net框架的.因此在解决mvc开发过程中的问题时,我很容易联想到在webform下同样的问题是如何解决的.以此来作为对照.我姑且把这种方法叫做迁移学习法吧.我以"小孩之

ajax 异步请求

<script type="text/javascript" > var http_request = false; function send_request(url){ http_request = false; if(window.XMLHttpRequest){ //Mozilla浏览器 http_request = new XMLHttpRequest(); if(http_request.overrideMimeType){ http_request.overr