2014-02-09 50 views
0
function load() { 
      var url = buildUrl(null, true); 
      $.ajax(url, { 
       cache: true, 
       dataType: 'json', 
       beforeSend: function(xhr) { 
        if (typeof plugin.cache[url] !== 'undefined') { 
         var result = plugin.cache[url]; 
//      xhr.done(); 
//      xhr.abort(); 
//      xhr.complete(); 
         return false; 
        } 
        return true; 

       }, 
       success: function(result, textStatus, jqXHR) { 


        handleResult(result); 

        plugin.cache[url] = JSON.stringify(result); 
       } 
      }); 

     }; 




$(document).ajaxError(function(event, jqxhr, settings, exception) { 
switch (jqxhr.status) { 
    .. 
    } 
} 

當我將結果緩存時,我希望$.ajax不要繼續進行調用。 如果我返回false或從beforeSend()調用xhr.abort(),則觸發ajaxError。當我撥打xhr.done()xhr.complete()時,通話進行。

有沒有什麼辦法可以阻止電話繼續進行而不會觸發$.ajaxError

+0

瀏覽器將成爲自動緩存結果,有沒有你想避免這樣一個特殊的原因? – Vishal

+0

由於某些原因,將緩存屬性設置爲true(僅),仍然會發出AJAX請求。 – Smokie

+1

緩存只適用於GET和HEAD請求,如果你不使用這些,你需要手動實現緩存 - 你已經在做的事情。因此,爲了防止錯誤調用,您需要在發出ajax請求之前檢查手動緩存。 – Vishal

回答

2

您可以將測試的天氣,您需要做的AJAX調用是這樣的:

function load() { 
    var url = buildUrl(null, true); 
    if (typeof plugin.cache[url] === 'undefined') 
    { 
     $.ajax(url, { 
      cache: true, 
      dataType: 'json', 
      success: function(result, textStatus, jqXHR) { 
       plugin.cache[url] = JSON.stringify(result); 
      } 
     }); 
    } 
    handleResult(plugin.cache[url]); 
}; 
+0

我應該更頻繁地在盒子外面看一眼:)謝謝Vishal。 – Smokie