javaScript

js中ajax小记

2017-08-26  本文已影响0人  清心挽风

一、ajax介绍

ajax:Asynchronous(异步) JavaScript and XML。
ajax的含义:通过js语法实现的异步网络请求技术。实现页面的局部更新(传统的form表单请求数据a标签请求数据等手段)这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。
异步:当代码执行到耗时操作时,先向后执行其他代码,等耗时操作处理完毕,再通过回调函数来处理耗时操作的结果。
同步:当代码执行到耗时操作时,代码暂停执行,等耗时代码执行完毕,再继续向后执行。

二、创建并配置ajax

1、创建xhr对象

var xhr=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');

2、请求配置参数:open()

xhr.open('GET','./data.json',true);
//第一个参数:设置请求方法:GET/POST/PUT...
//第二个参数:请求路径:相对路径(如果请求的是同一台服务器的文件,使用相对路径'./data.json')、
//绝对路径(如果请求的是服务器中的某一个数据接口,则需要使用绝对路径'http://www.baidu.xom/data/json'),
//如果请求参数是GET则在路径后面拼接所传参数'./data.json?username='+encodeURI('张三'),
//接口和参数之间使用“?”链接,参数和参数 之间使用“&”链接,key值和value值之间使用“=”链接。
//第三个参数:配置请求是否为异步请求,默认不给值时为true,表示异步请求,false为同步请求

3、发送请求:send()

xhr.send(null);
//如果请求方式是POST,则在这里放所传递的参数

4、设置请求状态:readystatechange事件在每次请求状态发生改变,都会触发该事件。

xhr.onreadystatechange=function(){
   if(xhr.readyState==4&&xhr.status==200){
//当readyState属性值为4,且status属性值为200-300之间(一般是200)表示服务器已经把数据返回回来。
//从xhr下的responseText属性中拿到服务器返回的值
           console.log(xhr.responseText);
    }
}

如果传递的参数中含有中文需要对中文进行转码,encodeURI()只能对中文进行转码。
var str=encodeURI('张三');

XHR 对象的 readyState 属性:

XHR对象的属性:
*responseText: 作为响应主体被返回的文本。
*responseXML: 如果响应的内容类型是 “text/xml”或”application/xml”,这个属性中将保存包含着相应数据的XML DOM文档。

三、请求参数注意事项

请求服务器,服务器会有数据缓存,如果两次请求一样,第二次会直接使用缓存中的数据。
解决方法:在传递参数时在URL后面添加一个随机数,Math.random()。这种方法也不会对服务器造成影响。
ajax发送的get请求,浏览器会首先获取到请求路径,用这个路径去匹配缓存中的请求记录,如果记录中存在一个一模一样的请求路径,则把记录中的缓存的服务器返回值发送回来,只有在没有找到对应记录的情况下,才会向服务器请求数据。
解决get请求缓存问题:在请求的路径后拼接一个随机数为接口参数,这样每次发起的请求路径会因为这个随机数变得不同,浏览器在记录中无法找到这条记录,因此就会从服务器获取最新的数据了。

经验:密码中有&或者=会导致密码失效

四、使用ajax请求xml和json的不同

//1、创建请求对象
            var xhr=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
            //2、配置请求参数
            xhr.open('GET','./data.xml',true);
                        //xhr.open('GET','./data.json',true);
            //3、发送请求
            xhr.send(null);
            //4、监听请求状态
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4&&xhr.status==200){
//获取json格式的数据,通过responseText属性获取的,拿到的数据时字符串类型,
//可以通过parse方法把字符串格式的json数据转为对象类型。
                    console.log(xhr.responseText);
                    //把json数据转为对象类型的数据
                    var obj=JSON.parse(xhr.responseText);
                    console.log(obj);
                    //获取xml格式的数据
//如果请求的数据时xml格式。可以通过responseXML属性获取到该数据的DOM结构,有利于数据解析。可以用节点获取数据。
                    console.log(xhr.responseXML);
                }
            }
上一篇下一篇

猜你喜欢

热点阅读