zoukankan      html  css  js  c++  java
  • 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 + " ");
              });
            });

  • 相关阅读:
    C# Linq Enumerable 技巧
    Winform 踩坑
    BootStrap Table
    java8+junit5实现并发测试(多线程)
    Junit5+REST-assured 做接口测试
    log4j的使用
    ASP.NET项目启用SSL
    hyper-v虚拟机内存占用过高
    C#使用qq邮箱的smtp服务发邮件
    CALayer设置圆角
  • 原文地址:https://www.cnblogs.com/ricesm/p/5029776.html
Copyright © 2011-2022 走看看