2011-09-05 97 views
1

正如以下鏈接所示,jQuery的$ .ajax調用返回一個ajax對象,稍後可用於在需要時中止該調用。

Abort Ajax requests using jQuery

我的項目是使用$ .load(),它返回對象的模式,而不是Ajax對象($( 「」)。load()方法)。

有沒有辦法從$ .load獲得ajax對象?

+0

爲什麼你不能改變使用$ .ajax,所以你可以使用相同的方法? – momo

+0

我有一個使用$ .load()的項目,將$ .load()更改爲$ .ajax()不是一個好主意。如果$ .load()可以以某種方式返回jqXHR對象來取消請求,那將會很好。 – Mumzee

回答

0

我不認爲你可以用當前的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,把它從那裏。