jQuery AJAX

AJAX
1.ajax请求
    1.1 $.ajax(url,[settings]) 用于通过后台HTTP请求加载远程数据。通过该函数,我们无需刷新当前页面即可获取远程服务器上的数据。
        jQuery.ajax()函数是jQuery的底层AJAX实现。jQuery.get()、 jQuery.post()、 load()、 jQuery.getJSON()、 jQuery.getScript()等函数都是该函数的简化形式(都调用该函数,只是参数设置有所不同或有所省略)
        属性:accepts  默认值 取决于dataType属性
             发送的内容类型请求头,用于告诉服务器——浏览器可以接收服务器返回何种类型的响应
             async  默认值 true
             表示是否是异步请求
             beforeSend   指定在请求发送前需要执行的毁掉函数
             该函数还有两个参数:其一是jqXHR对象,其二是当前settings对象。这是一个Ajax事件,如果该函数返回false,将取消本次ajax请求。
             cache  默认值 true (dataType为script或jsonp时,则默认为false)
             指示是否缓存URL请求。如果设为false将强制浏览器不缓存当前URL请求。该参数只对HEAD、GET请求有效(POST请求本身就不会缓存)。
             complete  指定请求完成(无论成功或失败)后需要执行的回调函数
             contents 一个以"{字符串:正则表达式}"配对的对象,用来确定jQuery将如何解析响应,给定其内容类型
             contentType  默认值 'application/x-www-form-urlencoded; charset=UTF-8'
             使用指定的内容编码类型将数据发送给服务器
             context 用于设置ajax相关回调函数的上下文对象(函数内的this)
             converters  默认值 {'* text': window.String, 'text html': true, 'text json': jQuery.parseJSON, 'text xml': jQuery.parseXML}
             一个数据类型转换器。每个转换器的值都是一个函数,用于返回响应转化后的值
             crossDomain  默认值 同域请求为false 跨域为true
             指示是否是跨域请求
             data  发送到服务器的数据,它将被自动转为字符串类型。如果是GET请求,它将被附加到URL后面。
             dataFilter 指定处理响应的原始数据的回调函数
             dataType 默认值:jQuery智能猜测,猜测范围(xml、 json、 script或html)
             指定返回的数据类型。该属性值可以为:
                 'xml' :返回XML文档,可使用jQuery进行处理。
                 'html': 返回HTML字符串。
                 'script': 返回JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意:在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
                 'json': 返回JSON数据。JSON数据将使用严格的语法进行解析(属性名必须加双引号,所有字符串也必须用双引号),如果解析失败将抛出一个错误。从jQuery 1.9开始,空内容的响应将返回null或{}。
                 'jsonp': JSONP格式。使用JSONP形式调用函数时,如"url?callback=?",jQuery将自动替换第二个?为正确的函数名,以执行回调函数。
                 'text': 返回纯文本字符串。
              error 指定请求失败时执行的回调函数
              global  默认值 true
              指示是否触发全局ajax,将该值设为false将阻止全局事件处理函数被触发,例如ajaxStart()和ajaxStop()。它可以用来控制各种Ajax事件。
              headers 默认值:true
              以对象形式指定附加的请求头信息。请求头X-Requested-With: XMLHttpRequest将始终被添加,当然你也可以在此处修改默认的XMLHttpRequest值。headers中的值可以覆盖beforeSend回调函数中设置的请求头(意即beforeSend先被调用)。
                $.ajax({
                    url: "my.php" ,
                    headers: {
                        "Referer": "http://www.365mini.com" // 有些浏览器不允许修改该请求头
                        ,"User-Agent": "newLine" // 有些浏览器不允许修改该请求头
                        ,"X-Power": "newLine"
                        ,"Accept-Language": "en-US"
                    }
                });
              jsonp 重写JSONP请求的回调函数名称。该值用于替代"url?callback=?"中的"callback"部分。
              jsonpCallback 为JSONP请求指定一个回调函数名。
              statusCode  默认值 {}
              一组数值的HTTP代码和函数构成的对象,当响应时调用了相应的代码。例如:
                $.ajax({
                    url: a_not_found_url ,
                    // 当响应对应的状态码时,执行对应的回调函数
                    statusCode: {
                        404: function() {
                            alert( "找不到页面" );
                        },
                        200: function(){
                            alert("请求成功");
                        }
                    }
                });
               type 默认值 get
               请求类型,可以为'POST'或'GET'
               $.ajax({
                     url: "jquery_ajax.php"
                    , type: "POST"
                    , data: "name=codeplayer&age=18"
                    , success: function( data, textStatus, jqXHR ){
                        // data 是返回的数据
                        // textStatus 可能为"success"、"notmodified"等
                        // jqXHR 是经过jQuery封装的XMLHttpRequest对象
                        alert("返回的数据" + data);
                    }
                });
                $.ajax({
                     url: "jquery_ajax.php?page=1&id=3"
                    , type: "POST"
                    // jQuery会自动将对象数据转换为 "name=codeplayer&age=18&uid=1&uid=2&uid=3"
                    , data: { name:"codeplayer", age:18, uid: [1, 2, 3] }
                    // 请求成功时执行
                    , success: function( data, textStatus, jqXHR ){
                        alert("返回的数据" + data);
                    }
                    // 请求失败时执行
                    , error: function(jqXHR, textStatus, errorMsg){
                        // jqXHR 是经过jQuery封装的XMLHttpRequest对象
                        // textStatus 可能为: null、"timeout"、"error"、"abort"或"parsererror"
                        // errorMsg 可能为: "Not Found"、"Internal Server Error"等
                        alert("请求失败:" + errorMsg);
                    }
                });
                // 将url单独提取出来作为第一个参数(jQuery 1.5+才支持)
                $.ajax("jquery_ajax.php?action=type&id=3", {
                     dataType: "json" // 返回JSON格式的数据
                    , success: function( data, textStatus, jqXHR ){
                        // 假设返回的字符串数据为{ "name": "CodePlayer", age: 20 }
                        // jQuery已帮我们将该JSON字符串转换为对应的JS对象,可以直接使用
                        alert( data.name ); // CodePlayer
                    }   
                });
                $.ajax( {
                    // 注意这里有个参数callback=?
                     url: "http://cross-domain/jquery_ajax.php?name=Jim&callback=?&age=21"
                    , async: false // 同步请求,发送请求后浏览器将被锁定,只有等到该请求完成(无论成功或失败)后,用户才能操作,js代码才会继续执行
                    , dataType: "jsonp" // 返回JSON格式的数据
                    , success: function( data, textStatus, jqXHR ){
                        // 假设返回的字符串数据为{ "site_name": "CodePlayer", "site_desc": "专注于编程开发技术分享" }
                        // jQuery已帮我们将该JSON字符串转换为对应的JS对象,可以直接使用
                        alert( data.site_desc ); // 专注于编程开发技术分享
                    }   
                });
                $.ajax( {
                    // 加载指定的js文件到当前文档中
                     url: "http://code.jquery.com/jquery-1.8.3.min.js"
                    , dataType: "script"
                });
    1.2 $.get(url,[data],[success],[type]) 通过HTTP GET形式的AJAX请求获取远程数据。
        // 以GET请求方式获取http://localhost/index.php?id=5的数据,将返回的html内容追加到body标签内
    $.get( "http://localhost/index.php?id=5", function(data, textStatus, jqXHR){
         // data 是该请求返回的数据(可能经过处理)
         // textStatus 可能是"success"、 "notmodified"等
         // jqXHR 是经过jQuery封装的XMLHttpRequest对象(保留其本身的所有属性和方法)
         $("body").append( data );
        } );
        $.get( "http://localhost/index.php?id=5", { bookId: 2 }, function(data, textStatus, jqXHR){
            // 如果返回的原始文本数据为{ "name": "CodePlayer", "age": 20 }
            // 由于get()指定了返回数据的类型为JSON,则jQuery将会尝试将返回数据转换为JSON对象
            // 如果转换成功,这里的data就已经是一个js对象
            alert( data.name ); // CodePlayer    
        }, "json" );
    1.3 $.post(url,[data],[success],[type]) 通过HTTP POST形式的AJAX请求获取远程数据。
        // 以POST请求方式获取http://localhost/index.php?id=5的数据,将返回的html内容追加到body标签内
        $.post( "http://localhost/index.php?id=5", function(data, textStatus, jqXHR){
                // data 是该请求返回的数据(可能经过处理)
                // textStatus 可能是"success"、 "notmodified"等
                // jqXHR 是经过jQuery封装的XMLHttpRequest对象(保留其本身的所有属性和方法)
                $("body").append( data );
         } );
        $.post( "http://localhost/index.php?id=5", { bookId: 2 }, function(data, textStatus, jqXHR){
            // 如果返回的原始文本数据为{ "name": "CodePlayer", "age": 20 }
            // 由于post()指定了返回数据的类型为JSON,则jQuery将会尝试将返回数据转换为JSON对象
            // 如果转换成功,这里的data就已经是一个js对象
            alert( data.name ); // CodePlayer
         }, "json" );
    1.4    $.get()与$.post()的一些区别
        1)GET请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给WEB服务器。当然在Ajax请求中,这种区别对用户是不可见的。
        2)GET方式对传输的数据大小有限制,通常不能大于2KB,而POST方式传递的数据量要比GET方式大得多,理论上不受限制。       
        3)GET方式请求的数据会被浏览器缓存起来,因此其他人就可以从浏览器的历史记录中读取到这些数据,例如账号和密码等。在某种情况下,GET方式会带来严重的安全问题。而POST方式相对来说就可以避免这些问题。        
        4)GET方式和POST方式传递的数据在服务器端的获取也不相同。在PHP中,GET方式的数据可以用$_GET[]获取,而POST方式可以用$_POST[]获取。两种方式都可以用$_REQUEST[]来获取
    1.5 $.getJSON(url,[data],[success]) 用于通过HTTP GET形式的AJAX请求获取远程JSON编码的数据
        SON是一种数据格式,JS原生支持JSON格式,通过jQuery.getJSON()从服务器获得的JSON数据,jQuery会先尝试将其转为对应的JS对象。
         如果请求的URL中包括"callback=?"等类似的部分,jQuery会自动将其视作JSONP,并执行对应的回调函数来获取JSON数据。
         // 获取index.php?type=json的JSON数据,获取成功时弹出对话框
         $.getJSON( "index.php?type=json", function(data, textStatus, jqXHR){
            // data 是该请求返回的数据(可能经过处理)
            // textStatus 可能是"success"、 "notmodified"等
            // jqXHR 是经过jQuery封装的XMLHttpRequest对象(保留其本身的所有属性和方法)
        
        
            // 如果服务器返回的JSON格式的数据是 {"id": 5, "name": "CodePlayer"}
            // JSON格式的数据的属性名称必须加双引号,字符串值必须加双引号。
            // jQuery已经将其转换成对应的JS对象
            alert( data.id ); // 5
            alert( data.name ); // CodePlayer
        
         } );
        // 获取"/action.php?m=list&page=2&size=10"的JSON数据,获取成功时弹出对话框
        $.getJSON( "/action.php?m=list", { page: 2, size: 10  }, function(data, textStatus, jqXHR){
            // 如果服务器返回的JSON格式的数据是 [ {"id":11, "title":"文章11"}, {"id":12, "title":"文章12"}, {"id":13, "title":"文章13"} ]
            // jQuery将获取的JSON格式数据转换为JS数组
            for(var i in data){
                var obj = data[i];
                alert( obj.title );
            }
         } );
    1.6 $.getScript(url,[success]) 用于通过HTTP GET形式的加载JavaScript文件并运行它。该函数用于动态加载JS文件,并在全局作用域下执行文件中的JS代码。函数可以加载跨域的JS文件。请注意,该函数是通过异步方式加载数据的。
        $.getScript( "http://www.365mini.com/static/js/jquery-util.js" );
        //加载并执行js文件:http://www.365mini.com/static/js/jquery-util.js?v=1.3
        //并在成功后执行回调函数
        $.getScript( "http://www.365mini.com/static/js/jquery-util.js?v=1.3", function(data, textStatus, jqXHR){
            // data 是该请求返回的数据(可能经过处理)
            // textStatus 可能是"success"、 "notmodified"等
            // jqXHR 是经过jQuery封装的XMLHttpRequest对象(保留其本身的所有属性和方法)
        
            alert( "加载成功" );
            // 这里假设加载的js文件中定义了函数renderUI(),这里即可执行
            renderUI();  
          });    
    1.7 load(url,[data],[complete]) 从服务器加载数据,并使用返回的html内容替换当前匹配元素的内容
        load()函数只会替换每个匹配元素的内部内容(innerHTML)。
        $("div").load("action.php?id=5", { username: "CodePlayer", age: 15 }, function(responseText, textStatus, jqXHR){
            // responseText 是响应(返回)的原始文本数据
            // textStatus 可能是 "success"、 "notmodified"、 "error"、 "timeout"、 "abort"或"parsererror"中的一个
            // jqXHR 是经过jQuery封装的XMLHttpRequest对象(保留其本身的所有属性和方法)
            if(textStatus == "success" || textStatus == "notmodified"){
                alert("加载成功!");
            }
        });
2.ajax事件
    2.1 ajaxStart(callback) 用于为AJAX请求的ajaxStart事件绑定处理函数。
           $("p").ajaxStart(function(){alert(){this.id}})
    2.2 ajaxStop(callback) 为AJAX请求的ajaxStop事件绑定处理函数
        $("p").ajaxStop(function(){alert(){this.id}})
    2.3 ajaxSend(callback) 置当AJAX请求即将被发送时执行的回调函数。
        $("div").ajaxSend( function(event, jqXHR, options){
            alert("处理函数1: 当前元素的id为" + this.id + ",请求的url为" + options.url);
        } );
    2.4 ajaxComplete(callback) 用于设置当AJAX请求完成(无论成功或失败)时执行的回调函数。
        $("div").ajaxComplete( function(event, jqXHR, options){
            alert("处理函数2:请求方式为" + options.type);
        } );
    2.5 ajaxSuccess(callback) 用于设置当AJAX请求成功完成时执行的回调函数。
        $("div").ajaxSuccess( function(event, jqXHR, options, data){
            alert("处理函数2:请求方式为" + options.type + ",返回的数据是" + data);
        } );
    2.6 ajaxError()函数用于设置当AJAX请求失败时执行的回调函数。
        $("div").ajaxError( function(event, jqXHR, options, errorMsg){
            alert("处理函数2:请求方式为" + options.type + ",错误描述为" + errorMsg);
        } );
3.其他
    3.1 $.ajaxSetup()函数用于设置AJAX的全局默认设置。
        $("button").click(function(){
        $.ajaxSetup({url:"demo_ajax_load.txt",success:function(result){
$("div").html(result);}});
             $.ajax();
         });
    3.2 $.param() 方法
        param() 方法创建数组或对象的序列化表示。
        该序列化值可在进行 AJAX 请求时在 URL 查询字符串中使用。
        序列化一个 key/value 对象:
        var params = { 1900, height:1200 };
        var str = jQuery.param(params);
        $("#results").text(str);
        结果:
        width=1680&height=1050
    3.3 serialize() 方法
        serialize() 方法通过序列化表单值,创建 URL 编码文本字符串。
        $("button").click(function(){
          $("div").text($("form").serialize());
        });
    3.4 serializeArray() 方法
        serializeArray() 方法通过序列化表单值来创建对象数组(名称和值),返回 JSON 数据结构数据。
        $("button").click(function(){
          x=$("form").serializeArray();
          $.each(x, function(i, field){
            $("#results").append(field.name + ":" + field.value + " ");
          });
        });

原文地址:https://www.cnblogs.com/ricesm/p/5029776.html