深入学习jquery源码之ajaxSetup()

深入学习jquery源码之ajaxSetup()

ajaxComplete(callback)

概述:

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

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

参数:

callback Function

待执行函数

使用

AJAX 请求完成时执行函数。

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

当 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("<li>出错页面:" + settings.url + "</li>");
});

 

ajaxSend(callback)

概述:

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

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

参数:

callback Function 

待执行函数

使用:

AJAX 请求发送前显示信息。

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

 

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("<li>请求成功!</li>");
 });

 

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} <hr />错误号:{0} <br /> 请求地址:{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 };
    });
});



设置请求头信息

<script>
   
    $.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);
                    }
                });
            
           
        });
    });
</script>

获取请求头信息中的参数

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);
        }

    });


    });

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wespten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值