1
正如以下鏈接所示,jQuery的$ .ajax調用返回一個ajax對象,稍後可用於在需要時中止該調用。
Abort Ajax requests using jQuery
我的項目是使用$ .load(),它返回對象的模式,而不是Ajax對象($( 「」)。load()方法)。
有沒有辦法從$ .load獲得ajax對象?
正如以下鏈接所示,jQuery的$ .ajax調用返回一個ajax對象,稍後可用於在需要時中止該調用。
Abort Ajax requests using jQuery
我的項目是使用$ .load(),它返回對象的模式,而不是Ajax對象($( 「」)。load()方法)。
有沒有辦法從$ .load獲得ajax對象?
我不認爲你可以用當前的API做到這一點。但是,由於開源的,看看在load
功能的信號源(來自jquery-1.6.2.js
):
jQuery.fn.extend({
load: function(url, params, callback) {
if (typeof url !== "string" && _load) {
return _load.apply(this, arguments);
// Don't do a request if no elements are being requested
} else if (!this.length) {
return this;
}
var off = url.indexOf(" ");
if (off >= 0) {
var selector = url.slice(off, url.length);
url = url.slice(0, off);
}
// Default to a GET request
var type = "GET";
// If the second parameter was provided
if (params) {
// If it's a function
if (jQuery.isFunction(params)) {
// We assume that it's the callback
callback = params;
params = undefined;
// Otherwise, build a param string
} else if (typeof params === "object") {
params = jQuery.param(params, jQuery.ajaxSettings.traditional);
type = "POST";
}
}
var self = this;
// Request the remote document
jQuery.ajax({
url: url,
type: type,
dataType: "html",
data: params,
// Complete callback (responseText is used internally)
complete: function(jqXHR, status, responseText) {
// Store the response as specified by the jqXHR object
responseText = jqXHR.responseText;
// If successful, inject the HTML into all the matched elements
if (jqXHR.isResolved()) {
// #4825: Get the actual response in case
// a dataFilter is present in ajaxSettings
jqXHR.done(function(r) {
responseText = r;
});
// See if a selector was specified
self.html(selector ?
// Create a dummy div to hold the results
jQuery("<div>")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
.append(responseText.replace(rscript, ""))
// Locate the specified elements
.find(selector) :
// If not, just inject the full result
responseText);
}
if (callback) {
self.each(callback, [ responseText, status, jqXHR ]);
}
}
});
return this;
}
}
稍微危險的,但可行的解決辦法是複製源,並改變它,使其返回ajax
叫什麼返回,而不是return this
。這很危險,因爲它可能依賴於內部jquery行爲,在未來的版本中,這可能會在沒有通知的情況下發生變化。
我可能會用不同的名稱一個新的功能擴展jQuery.fn,也許loadAjax
如果您使用的是不同版本的jQuery,把它從那裏。
爲什麼你不能改變使用$ .ajax,所以你可以使用相同的方法? – momo
我有一個使用$ .load()的項目,將$ .load()更改爲$ .ajax()不是一個好主意。如果$ .load()可以以某種方式返回jqXHR對象來取消請求,那將會很好。 – Mumzee