js中ajax小记

作者: 清心挽风 | 来源:发表于2017-08-26 09:54 被阅读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 属性:

    • 0:未初始化。尚未调用 open() 方法。
    • 1:启动。已经调用 open() 方法,但尚未调用 send() 方法。
    • 2:发送。已经调用 send() 方法,但尚未接收响应。
    • 3:接收。已经接收到部分响应数据。
    • 4:完成。已经接收到全部响应数据,而且已经可以在客户端使用了

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

    • status: 响应的HTTP状态。
    • statusText: HTTP状态的说明。
      接受响应之后,第一步是检查 status 属性,以确定响应已经成功返回。状态码:
    • 200 表示成功。
    • 304 表示请求的资源并没有修改,可以直接使用浏览器中缓存的版本,响应也是有效的。
    • 500表示服务器错误。

    三、请求参数注意事项

    请求服务器,服务器会有数据缓存,如果两次请求一样,第二次会直接使用缓存中的数据。
    解决方法:在传递参数时在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);
                    }
                }
    

    相关文章

      网友评论

        本文标题:js中ajax小记

        本文链接:https://www.haomeiwen.com/subject/ublmdxtx.html