色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

jquery ajax post源碼

謝彥文2年前9瀏覽0評論

jQuery是一個(gè)非常流行的JavaScript庫,主要用于處理DOM元素,事件,動畫效果等。另外,jQuery也提供了一個(gè)強(qiáng)大的AJAX方法,用于異步加載數(shù)據(jù),更新頁面內(nèi)容。其中,$.ajax()方法是最基本的AJAX方法,支持GET,POST,PUT等請求方式。下面我們來看一下$.ajax()方法的源碼實(shí)現(xiàn)。

jQuery.ajax = function(options) {
//合并參數(shù)
options = jQuery.extend({}, options || {});
var deferred = jQuery.Deferred();
var urlAnchor;
//解析URL
urlAnchor = document.createElement('a');
urlAnchor.href = options.url;
//默認(rèn)選項(xiàng)
options = jQuery.extend({
url: urlAnchor.href,
type: 'GET',
dataType: 'json',
processData: true,
beforeSend: function(xhr, settings) {},
success: function(data, textStatus, xhr) {},
error: function(xhr, textStatus, errorThrown) {},
complete: function(xhr, textStatus) {},
context: options,
}, options);
//處理data參數(shù)
if (options.data && options.processData && typeof options.data !== 'string') {
options.data = jQuery.param(options.data, options.traditional);
}
//創(chuàng)建xhr對象
var xhr = options.xhr();
xhr.open(options.type, options.url, options.async, options.username, options.password);
try {
//設(shè)置header
if (options.contentType) {
xhr.setRequestHeader('Content-Type', options.contentType);
}
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
//設(shè)置beforeSend回調(diào)函數(shù)
if (options.beforeSend.call(options.context, xhr, options) === false) {
//取消請求
xhr.abort();
deferred.rejectWith(options.context, ['abort', xhr, options]);
return xhr;
}
//監(jiān)聽xhr事件
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
//請求完成
xhr.onreadystatechange = jQuery.noop;
var isSuccess = xhr.status >= 200 && xhr.status< 300 || xhr.status === 304;
if (isSuccess) {
//處理成功的回調(diào)函數(shù)
deferred.resolveWith(options.context, [xhr.response, xhr.status, xhr]);
} else {
//處理失敗的回調(diào)函數(shù)
deferred.rejectWith(options.context, [xhr, 'error', xhr.statusText]);
}
//處理complete回調(diào)函數(shù)
options.complete.call(options.context, xhr, isSuccess ? 'success' : 'error');
}
};
//發(fā)送請求
xhr.send(options.data);
} catch (e) {
//處理請求異常
deferred.rejectWith(options.context, [e, xhr, options]);
}
//返回promise對象
return deferred.promise();
};

上面是$.ajax()方法的源碼實(shí)現(xiàn),通過解析URL,合并參數(shù),創(chuàng)建xhr對象,監(jiān)聽事件等步驟,實(shí)現(xiàn)了一個(gè)基本的AJAX請求。此外,源碼中還包含了一些默認(rèn)選項(xiàng)和回調(diào)函數(shù),可以通過options參數(shù)進(jìn)行配置。這個(gè)方法已經(jīng)封裝的比較完善,一般情況下我們只需要傳入url和data等必要參數(shù)即可,具體的錯(cuò)誤處理和數(shù)據(jù)處理在success和error回調(diào)函數(shù)中進(jìn)行。這就是jQuery中的AJAX實(shí)現(xiàn)方式。