2014-02-09 33 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