您当前的位置: 首页 >  jquery

wespten

暂无认证

  • 0浏览

    0关注

    899博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

深入学习jquery源码之ajaxSetup()

wespten 发布时间:2018-12-24 09:32:27 ,浏览量:0

深入学习jquery源码之ajaxSetup()

ajaxComplete(callback)

概述:

AJAX 请求完成时执行函数。Ajax 事件。

XMLHttpRequest 对象和设置作为参数传递给回调函数。

参数:

callback Function

待执行函数

使用

AJAX 请求完成时执行函数。

$("#msg").ajaxComplete(function(event,request, settings){
   $(this).append("
  • 请求完成.
  • "); });

    当 AJAX 请求正在进行时显示“正在加载”的指示:

    $("#txt").ajaxStart(function(){
      $("#wait").css("display","block");
    });
    $("#txt").ajaxComplete(function(){
      $("#wait").css("display","none");
    });

     

    ajaxError(callback)

    概述:

    AJAX 请求发生错误时执行函数。Ajax 事件。

    XMLHttpRequest 对象和设置作为参数传递给回调函数。捕捉到的错误可作为最后一个参数传递。

    参数:

    callback Function

    待执行函数

    function (event, XMLHttpRequest, ajaxOptions, thrownError) {
          // thrownError 只有当异常发生时才会被传递
          this; // 监听的 dom 元素
    }

    使用:

    AJAX 请求失败时显示信息。

    $("#msg").ajaxError(function(event,request, settings){
         $(this).append("
  • 出错页面:" + settings.url + "
  • "); });

     

    ajaxSend(callback)

    概述:

    AJAX 请求发送前执行函数。Ajax 事件。

    XMLHttpRequest 对象和设置作为参数传递给回调函数。

    参数:

    callback Function 

    待执行函数

    使用:

    AJAX 请求发送前显示信息。

    $("#msg").ajaxSend(function(evt, request, settings){
       $(this).append("
  • 开始请求: " + settings.url + "
  • "); });

     

    ajaxStart(callback)

    概述:

    AJAX 请求开始时执行函数。Ajax 事件。

    参数:

    callback Function

    待执行函数

    说明

    AJAX 请求开始时显示信息。

    $("#loading").ajaxStart(function(){
       $(this).show();
     });

     

    ajaxStop(callback)

    概述:

    AJAX 请求结束时执行函数。Ajax 事件

    参数:

    callback Function

    待执行函数

    使用:

    AJAX 请求结束后隐藏信息。

    $("#loading").ajaxStop(function(){
       $(this).hide();
     });

     

    ajaxSuccess(callback)

    概述:

    AJAX 请求成功时执行函数。Ajax 事件。

    XMLHttpRequest 对象和设置作为参数传递给回调函数。

    参数:

    callback Function

    待执行函数

    使用:

    当 AJAX 请求成功后显示消息。

     $("#msg").ajaxSuccess(function(evt, request, settings){
       $(this).append("
  • 请求成功!
  • "); });

     

    ajaxSetup([options])

    概述:

    设置全局 AJAX 默认选项。

    参数:

    options Object

    选项设置。所有设置项均为可选设置。.

    说明:

    设置 AJAX 请求默认地址为 "/xmlhttp/",禁止触发全局 AJAX 事件,用 POST 代替默认 GET 方法。其后的 AJAX 请求不再设置任何选项参数。

    $.ajaxSetup({
      url: "/xmlhttp/",
      global: false,
      type: "POST"
    });
    $.ajax({ data: myData });

    ajaxSetup() 方法为将来的 AJAX 请求设置默认值。

    (function (window, $) {
     /**统一处置ajax 的一些事件 和参数*/
        function _ajaxSetup() {
    
            $(document).ajaxStart(function () {
                window.ajaxruning = true;
                $Core.IsAjaxTimeOut = false;
                $Core.Loading.AjaxLoadingStart();
                //console.log("documentStart");
            }).ajaxStop(function () {
                window.ajaxruning = false;
                $Core.Loading.HideAjaxLoading();
                //console.log("documentStop");
    
            }).ajaxError(function (event, XMLHttpRequest, ajaxOptions, thrownError) {
                $Core.Loading.HideAll();
                if (thrownError === "timeout") {
                    $Core.IsAjaxTimeOut = true;
                    showError(ajaxOptions, "timeout", "请求超时,请检查您的网络连接!");
                    return;
                }
                showError(ajaxOptions, XMLHttpRequest.status, XMLHttpRequest.responseText);
            });
    
            //这里设置统一的头信息
            $.ajaxSetup({
                beforeSend: function (xhr) {
                    //alert(this.url);
                    if (this.url) {
                        if (!this.url.contains("http"))
                            this.url = $Core.SERVICEPATH() + this.url;
                    }
                },
                //dataType: "josn",
                headers: {
                    'token': $Core.USER().TOKEN,
                    'appid': $Core.APPID
                },
                contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
                timeout: $Core.Config.ajaxTimeout,
                cache: false,
                //xhrFields: {
                //    withCredentials: true
                //},
                //dataType:"json",
                crossDomain: true,
                complete: function (XHR, TS) {
                    if (TS === "success") {
                        var result = XHR.responseJSON;
                        if (result && result.code) {
                            if (result.code == "500") {
                                showError(this, 500, result.msg);
                                return false;
                            }
                            else if (result.code == "401") { //登录信息失败
                                showError(this, 401, "您的登录信息已经失效,请重新登录系统!", $Core.TimeOut);
                                return false;
                            }
                            else if (result.code == "403") { //资源信息失败
                                return false;
                            }
                        }
                    }
                    //console.log(XHR, TS);
                }
    
            });
        }
    
    
        /*************************************ajaxEnd***************************************/
        _ajaxSetup();
    
    })(window, jQuery);
    function showError(ajaxOpts, errorCode, errorMsg, callback) {
        var topwin = window;
        if (topwin.iserrorshow) return;
        topwin.iserrorshow = true;
        var msg = "{1} 错误号:{0}  请求地址:{2}".format(errorCode,
            $.string.isNullOrWhiteSpace(errorMsg) ? "系统出现了一个未指明的错误,如果该问题重复出现,请联系您的系统管理员并反馈该故障。"
                : errorMsg,
            ajaxOpts.url
        );
     if (topwin.layer) {
            topwin.layer.open({
                title: '错误提醒',
                type: 0,
                fixed: false, //不固定
                maxmin: false,
                content: msg,
                end: function (index, layero) {
                    winClose();
                }
    
            });
        }
        else {
            alert(msg);
            winClose();
        }
    
        var winClose = function () {
            topwin.iserrorshow = false;
            if (callback !== undefined)
                callback();
        };
    
    }
    
    //禁止表单回车自动提交
    $(function () {
        $("form input").keydown(function () {
            if (event.keyCode == 13) { return false };
        });
    });
    
    
    
    

    设置请求头信息

    
       
        $.ajaxSetup({
           
            //dataType: "josn",
            headers: {
                'appid': $Core.APPID
            },
            contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
            timeout: 10000,
            cache: false,
            //xhrFields: {
            //    withCredentials: true
            //},
            crossDomain: true
    
        });
        $(document).ajaxError(function (event, XMLHttpRequest, ajaxOptions, thrownError) {
            $Core.Loading.HideAll();
            if (thrownError === "timeout") {
                alert("网络连接超时,请稍后重试!")
                return;
            }
            alert("网络连接异常,请稍后重试!" + XMLHttpRequest.responseText);
        });
    
        $(function () {
            //var user = $Core.USER();
            //if (user != null) {
            //    location.href = "main.html";
            //    return;
            //}
            $("#pageloading").fadeOut();
            // $Core.Loading.HideAll();
            //login
            $("#btnLogin").click(function () {
                var ucode = $("#userCode").val();
                var pass = $("#passWord").val();
                $.post($Core.SERVICEROOT()+"login", { usercode: ucode, userpass: pass },
                    function (result) {
                        console.log(result);
                        if (result.code === 0) {
                            var udata = result.data;
                            var userinfo = {};
                            userinfo.USERID = udata.userId;
                            userinfo.USERNAME = udata.userName;
                            userinfo.DEPID = udata.orgId;
                            userinfo.DEPNAME = udata.orgName;
                            userinfo.OrgManageDataCode = udata.orgManageDataCode;
                            userinfo.TOKEN = udata.token;
                            userinfo.orgLevel = udata.orgLevel;
                            //userinfo.RESOURCELIST = udata.resourceList;
                            userinfo.OrgDataCode = udata.orgDataCode;
                            $Core.Login(userinfo);
                            location.href = "main.html";
                        } else {
                            alert(result.msg);
                        }
                    });
                
               
            });
        });
    

    获取请求头信息中的参数

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    	@RequestMapping(value="/login")
    	public AssembleJSON login(HttpServletRequest request, HttpServletResponse response){
    		String usercode = request.getParameter("usercode");
    		String userpass = request.getParameter("userpass");
    		String appid = request.getHeader("appid");
    }
    
    

     

    jquery源码

        // A special extend for ajax options
        // that takes "flat" options (not to be deep extended)
        // Fixes #9887
        function ajaxExtend(target, src) {
            var deep, key,
                flatOptions = jQuery.ajaxSettings.flatOptions || {};
    
            for (key in src) {
                if (src[key] !== undefined) {
                    (flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];
                }
            }
            if (deep) {
                jQuery.extend(true, target, deep);
            }
    
            return target;
        }
    
    
        jQuery.extend({
    
            // Counter for holding the number of active queries
            active: 0,
    
            // Last-Modified header cache for next request
            lastModified: {},
            etag: {},
    
            ajaxSettings: {
                url: ajaxLocation,
                type: "GET",
                isLocal: rlocalProtocol.test(ajaxLocParts[1]),
                global: true,
                processData: true,
                async: true,
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                /*
                timeout: 0,
                data: null,
                dataType: null,
                username: null,
                password: null,
                cache: null,
                throws: false,
                traditional: false,
                headers: {},
                */
    
                accepts: {
                    "*": allTypes,
                    text: "text/plain",
                    html: "text/html",
                    xml: "application/xml, text/xml",
                    json: "application/json, text/javascript"
                },
    
                contents: {
                    xml: /xml/,
                    html: /html/,
                    json: /json/
                },
    
                responseFields: {
                    xml: "responseXML",
                    text: "responseText",
                    json: "responseJSON"
                },
    
                // Data converters
                // Keys separate source (or catchall "*") and destination types with a single space
                converters: {
    
                    // Convert anything to text
                    "* text": String,
    
                    // Text to html (true = no transformation)
                    "text html": true,
    
                    // Evaluate text as a json expression
                    "text json": jQuery.parseJSON,
    
                    // Parse text as xml
                    "text xml": jQuery.parseXML
                },
    
                // For options that shouldn't be deep extended:
                // you can add your own custom options here if
                // and when you create one that shouldn't be
                // deep extended (see ajaxExtend)
                flatOptions: {
                    url: true,
                    context: true
                }
            },
    
            // Creates a full fledged settings object into target
            // with both ajaxSettings and settings fields.
            // If target is omitted, writes into ajaxSettings.
            ajaxSetup: function (target, settings) {
                return settings ?
    
                    // Building a settings object
                    ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :
    
                    // Extending ajaxSettings
                    ajaxExtend(jQuery.ajaxSettings, target);
            }
    
        });
    
    
        });

     

     

     

     

     

     

     

     

     

    关注
    打赏
    1665965058
    查看更多评论
    立即登录/注册

    微信扫码登录

    0.1456s