美文网首页
ajax小结

ajax小结

作者: hunter97 | 来源:发表于2018-08-21 12:48 被阅读0次

      在开发过程中ajax是必须的,对近期在ajax的使用上的心得进行总结。

    一、关于ajax
      AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。即ajax可以通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 ajax工作原理.png
    //原生ajax实例
    var xmlhttp;
    if (window.XMLHttpRequest) {
        // IE7+, Firefox, Chrome, Opera, Safari   建立XMLHttpRequest实例
        xmlhttp=new XMLHttpRequest();
    } else {
        // IE6, IE5   建立XMLHttpRequest实例
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    // 监听onreadystatechange事件
    xmlhttp.onreadystatechange= fuction(){
        // 当readyState=4请求已完成,且响应已就绪;当status=200是,通信成功
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            console.log(xmlhttp.responseText);
        }
    };
    xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
    xmlhttp.send();
    
    

    当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。 onreadystatechange 事件被触发 4 次(0 - 4), 分别是: 0-1、1-2、2-3、3-4,对应着 readyState 的每个变化。readyState 属性存有 XMLHttpRequest 的状态信息。
    readyState 属性所对应的信息
    0: 请求未初始化
    1: 服务器连接已建立
    2: 请求已接收
    3: 请求处理中
    4: 请求已完成
    在请求已完成,且状态码(status)为200时,表示响应已就绪。
    不同的状态码对应不同的信息,请求状态。

    状态码 信息
    100 客户必须继续发出请求
    101 客户要求服务器根据请求转换HTTP协议版本
    200 交易成功
    201 提示知道新文件的URL
    202 接受和处理、但处理未完成
    203 返回信息不确定或不完整
    204 请求收到,但返回信息为空
    205 服务器完成了请求,用户代理必须复位当前已经浏览过的文件
    206 服务器已经完成了部分用户的GET请求
    300 请求的资源可在多处得到
    301 删除请求数据
    302 在其他地址发现了请求数据
    303 建议客户访问其他URL或访问方式
    304 客户端已经执行了GET,但文件未变化
    305 请求的资源必须从服务器指定的地址得到
    306 前一版本HTTP中使用的代码,现行版本中不再使用
    307 申明请求的资源临时性删除
    400 错误请求,如语法错误
    401 请求授权失败
    402 保留有效ChargeTo头响应
    403 请求不允许
    404 没有发现文件、查询或URl
    405 用户在Request-Line字段定义的方法不允许
    406 根据用户发送的Accept拖,请求资源不可访问
    407 类似401,用户必须首先在代理服务器上得到授权
    408 客户端没有在用户指定的时间内完成请求
    409 对当前资源状态,请求不能完成
    410 服务器上不再有此资源且无进一步的参考地址
    411 服务器拒绝用户定义的Content-Length属性请求
    412 一个或多个请求头字段在当前请求中错误
    413 请求的资源大于服务器允许的大小
    414 请求的资源URL长于服务器允许的长度
    415 请求资源不支持请求项目格式
    416 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
    417 服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
    500 服务器产生内部错误
    501 服务器不支持请求的函数
    502 服务器暂时不可用,有时是为了防止发生系统过载
    503 服务器过载或暂停维修
    504 关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
    505 服务器不支持或拒绝支请求头中指定的HTTP版本
    二、ajax二次封装及使用

    原生的ajax使用比较繁杂,所以通常在开发的过程中会使用其他框架封装好的ajax。最为常见的是jQuery封装的ajax。
    最新版本的jQuery把ajax封装成了下面的形式:

    $.ajax({
        url: '/path/to/file',//请求地址
        type: 'default GET (Other values: POST)',//请求类型
        dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',//数据类型
        data: {param1: 'value1'},//请求提交的数据
    }).done(function(data) {//请求成功执行的函数
        console.log("success");
        console.log(data);
    }).fail(function(error) {//请求失败执行的函数
        console.log(error);
    }).always(function() {//无论成功失败都会执行的函数
        console.log("complete");
    });
    

    而我们一般在是用的时候会这个基础上进行适合自己的二次封装

    (function($){  
        $.extend({
            /**
             * @desc    ajax.post 封装
             * @param   url 发送请求的地址
             * @param   data 发送到服务器的数据
             * @param   successfn 成功回调函数
             */
            FiveAjax:function(type,url, data, successfn) {
                console.log(url);
                console.log(data);
                $.ajax({
                    type: type ,
                    async: 'true' ,
                    data: data ,
                    url: url ,
                    dataType: 'json' ,
                    success: function(d) {
                        // 网络正确
                        successfn(d);
                    },
                    error: function(e) {
                        // 网络错误
                        console.error(e);
                       //错误提示弹出层
                        var err = '<br>' + '网络错误' + '<br>' + 'statusCode : ' + e.status + '<br>' + 'statusText : ' + e.statusText ; 
                        layer.msg(  err ,{
                            icon: 2 ,
                            time : 30000 ,
                            btn: ['确定']
                        });
                    }
                });
            }
        })    
    })(jQuery);   
    

    这样使用起来就很简单了,

    $.FiveAjax('post','user/login',{
        username:'admin',
        password:'test
    '},function(data){
        console.log('通信成功,返回的数据是'+data);
    });
    

    有时候,你必须一个人走,这不是孤独,而是选择。

    相关文章

      网友评论

          本文标题:ajax小结

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