深入学习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);
}
});
});