当前位置:  开发笔记 > 编程语言 > 正文

阻止jQuery .load响应被缓存

如何解决《阻止jQuery.load响应被缓存》经验,为你挑选了6个好方法。

我有以下代码在URL上发出GET请求:

$('#searchButton').click(function() {
    $('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());            
});

但返回的结果并不总是反映出来.例如,我更改了堆栈跟踪的响应,但是当我单击搜索按钮时没有出现堆栈跟踪.我查看了控制ajax响应的底层PHP代码,它有正确的代码,直接访问页面显示正确的结果,但.load返回的输出是旧的.

如果我关闭浏览器并重新打开它,它会工作一次,然后开始返回陈旧的信息.我可以通过jQuery控制它,还是需要我的PHP脚本输出头来控制缓存?



1> John Milliki..:

您必须使用更复杂的功能,例如,$.ajax()如果要基于每个请求控制缓存.或者,如果您只想将其关闭,请将其放在脚本的顶部:

$.ajaxSetup ({
    // Disable caching of AJAX responses
    cache: false
});


所有这些缓存:false都会在发出请求时将数字(我相信它的时间戳)附加到URL的末尾.处理缓存设置的另一个地方是来自服务器或Web应用程序,通过设置各种HTTP响应标头,如Expires,Pragma等...
谢谢!这甚至位于jQuery文档中吗?啊...找到了。有点埋葬。一天的大部分时间里,这一切都是在踢屁股...再次感谢!

2> 小智..:

以下是如何基于每个请求控制缓存的示例

$.ajax({
    url: "/YourController",
    cache: false,
    dataType: "html",
    success: function(data) {
        $("#content").html(data);
    }
});


我喜欢这种方式远比关闭所有缓存更好.

3> Lou Franco..:

一种方法是在URL的末尾添加一个唯一的数字:

$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val()+'&uid='+uniqueId());

你在每次调用时写下uniqueId()来返回不同的东西.


function uniqueId(){return new Date.getTime(); };

4> Gomes..:

另一种方法是仅在需要从服务器获取数据时放置以下行,将下面的行与您的ajax URL一起添加.

'?_ =' + Math.round(的Math.random()*10000)



5> 小智..:
/**
 * Use this function as jQuery "load" to disable request caching in IE
 * Example: $('selector').loadWithoutCache('url', function(){ //success function callback... });
 **/
$.fn.loadWithoutCache = function (){
 var elem = $(this);
 var func = arguments[1];
 $.ajax({
     url: arguments[0],
     cache: false,
     dataType: "html",
     success: function(data, textStatus, XMLHttpRequest) {
   elem.html(data);
   if(func != undefined){
    func(data, textStatus, XMLHttpRequest);
   }
     }
 });
 return elem;
}



6> 小智..:

Sasha是个好主意,我使用混合物.

我创建了一个函数

LoadWithoutCache: function (url, source) {
    $.ajax({
        url: url,
        cache: false,
        dataType: "html",
        success: function (data) {
            $("#" + source).html(data);
            return false;
        }
    });
}

并调用我的页面的不同部分,例如在init上:

Init:function(actionUrl1,actionUrl2,actionUrl3){

var ExampleJS = {

Init: function (actionUrl1, actionUrl2, actionUrl3)           ExampleJS.LoadWithoutCache(actionUrl1, "div1");

ExampleJS.LoadWithoutCache(actionUrl2,"div2"); ExampleJS.LoadWithoutCache(actionUrl3,"div3"); },

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有