美文网首页Ajax
Ajax 模板大法讲解

Ajax 模板大法讲解

作者: CondorHero | 来源:发表于2019-04-02 20:16 被阅读14次

    1.XHR对象

    Ajax 完全依赖 XMLHttpRequest 对象,字面意思就是“XML文件的HTTP请求”对象。一般把 new 出来的变量叫做 xhr。
    var xhr = new XMLHttpRequest();
    驼峰命名法
    IE6不兼容。
    new ActiveXObject("Microsoft.XMLHTTP");

    2.open方法

    open 方法表示让 xhr 对象配置一个请求,open 字面意思是打开,就是打开一个请求。open 之后并没有真正的发送请求,而是要用 send() 方法
    open方法有三个参数:
    xhr.open(要发送的请求类型,路径,是否使用异步);
    第一个参数,要么是"get" 要么是"post"
    第二个参数,就是处理这个请求的PHP、java、.net路径
    的三个参数,表示是否是异步处理,没有任何理由不用 true,必须写 true

    关于同步异步?
    异步:不死等耗时较长的事情完成,先同时干别的事情,耗时较长的事情完成了,控制权交给回调函数
    同步:就是异步的反面,死等那个耗时较长的事情完成,然后做别的事情
    说白了,就是死等不死等的区别。
    node.js中单线程、异步的关系?答案是没关系。
    多线程可以同步,单线程也可以异步。

    4.send()方法

    send方法就是发送请求,里面的参数表示 http requset 报头里面携带内容。
    get请求报头里面没有内容,post请求有内容。
    get请求:
    xhr.send(null);
    post请求,写的也是类似于get请求的参数字符串:
    xhr.send("name=kaola&age=18");

    5. encodeURIComponent()

    请求尽量不要有中文,如果要传输中文就要防止服务器上错乱,一般要进行 encodeURIComponent 处理。注意是URI你不是URL。
    一般来讲,高级后台程序语言,都能够自动处理转译。
    语法:
    encodeURIComponent("我是一个文本");

    中文自动编译
    get请求、post请求如果要用中文,一般要将中文转为URI标准字符。
    image.png

    世界上所有的文字都有URI编码,根据你的HTML页面的字符集不同,URI编码也不同。

    6. post请求错误必须 setRequestHeader

    POST请求在服务器端比较难处理,需要用服务器写对应“流处理”程序。为什么?POST请求参数的尺寸可以无限大,所以 post 请求也是一段一段上去的。(node.js中将遇见这个datachuck)。
    比如 $_POST[] 接收会报错。
    但是,如果是表单提交,那么PHP内置了相应处理程序。Ajax 如果需要模拟表单提交,那么需要在send前设置:

        xhr.open("post","do2.php",true);
            //如果用post发送请求,那么必须写一句话,模拟成form表单提交:
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xhr.send("xingming="+encodeURIComponent("考拉")+"&age=18");
    

    6. readystatechange事件

    xhr 对象一旦开始 open,就有了 readyState 属性,readyState 属性一旦发生改变,就能够触发onreadystatechange 事件
    xhr.readystate的0 1 2 3 分别代表:

    1. 代表未初始化。 还没有调用 open 方法
    2. 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用
    3. 代表已加载完毕。send 已被调用。请求已经开始
    4. 代表交互中。服务器正在发送响应
    5. 代表完成。响应发送完毕
      xhr.responseText就表示接收回来的文本。是一个string类型。

    7.HTTP状态码

    常用状态码(status)及其含义:
    404 没找到页面(not found)
    403 禁止访问(forbidden)
    500 内部服务器出错(internal service error)
    200 一切正常(ok)
    304 没有被修改(not modified)(服务器返回304状态,表示源文件没有被修改 )


    HTTP状态码

    为了防止文件未访问出现服务器错误。改写连接Ajax代码如下:

    xhr.onreadystatechange = function(){
                    if(xhr.readyState == 4){
                        if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){
                            biaoti.innerHTML = xhr.responseText;
                        }else{
                            biaoti.innerHTML = "服务器错误,请稍后再试";
                        }
                    }
                }
    

    相关文章

      网友评论

        本文标题:Ajax 模板大法讲解

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