Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止jQuery。从缓存中加载响应_Jquery_Ajax_Caching - Fatal编程技术网

停止jQuery。从缓存中加载响应

停止jQuery。从缓存中加载响应,jquery,ajax,caching,Jquery,Ajax,Caching,我有以下代码对URL发出GET请求: $('#searchButton').click(function() { $('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val()); }); 但返回的结果并不总是反映出来。例如,我在响应中做了一个更改,抛出了堆栈跟踪,但当我单击搜索按钮时,堆栈跟踪没有出现。我查看了控制ajax响应的底层PHP代码,它有正确的代码,访问页面直接显示

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

$('#searchButton').click(function() {
    $('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());            
});
但返回的结果并不总是反映出来。例如,我在响应中做了一个更改,抛出了堆栈跟踪,但当我单击搜索按钮时,堆栈跟踪没有出现。我查看了控制ajax响应的底层PHP代码,它有正确的代码,访问页面直接显示了正确的结果,但是.load返回的输出是旧的


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

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

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

编写uniqueId()以在每次调用时返回不同的内容。

这在IE中特别麻烦。基本上,您必须将“无缓存”HTTP头与服务器的响应一起发送回。

如果您希望按请求控制缓存,则必须使用更复杂的函数,如
$.ajax()
。或者,如果您只是想在所有情况下都将其关闭,请将以下内容放在脚本的顶部:

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

对于PHP,将这一行添加到脚本中,以提供所需的信息:

header("cache-control: no-cache");
或者,向查询字符串添加唯一变量:

"/portal/?f=searchBilling&x=" + (new Date()).getTime()
试试这个:

$("#Search_Result").load("AJAX-Search.aspx?q=" + $("#q").val() + "&rnd=" + String((new Date()).getTime()).replace(/\D/gi, ''));

当我使用它时,它工作得很好。

下面是一个如何根据每个请求控制缓存的示例

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

萨沙是个好主意,我用的是混音

我创建了一个函数

LoadWithoutCache: function (url, source) {
    $.ajax({
        url: url,
        cache: false,
        dataType: "html",
        success: function (data) {
            $("#" + source).html(data);
            return false;
        }
    });
}
并调用我页面的不同部分,例如在init上:

初始化:函数(actionUrl1、actionUrl2、actionUrl3){

var ExampleJS={

Init: function (actionUrl1, actionUrl2, actionUrl3)           ExampleJS.LoadWithoutCache(actionUrl1, "div1");
例如js.LoadWithoutCache(actionUrl2,“div2”); 例如js.LoadWithoutCache(actionUrl3,“div3”); }
},

我注意到,如果某些服务器(如Apache2)未配置为专门允许或拒绝任何“缓存”,则服务器在默认情况下可能会发送“缓存”响应,即使您将HTTP头设置为“无缓存”。因此,请确保服务器在发出响应之前没有“缓存”任何内容:

就Apache2而言,您必须

1) 编辑“disk_cache.conf”文件-要禁用缓存,请添加“CacheDisable/local_files”指令

2) 加载mod_缓存模块(在Ubuntu“sudoa2enmod缓存”和“sudoa2enmod磁盘_缓存”上)

3) 重启Apache2(Ubuntu“sudo服务Apache2重启”)

这应该可以在服务器端禁用缓存。
干杯!:)

不要使用时间戳创建唯一的URL,因为jquery mobile会将您访问的每个页面缓存在DOM中,您很快就会遇到手机内存不足的问题

$jqm(document).bind('pagebeforeload', function(event, data) {
    var url = data.url;
    var savePageInDOM = true;

    if (url.toLowerCase().indexOf("vacancies") >= 0) {
        savePageInDOM = false;
    }

    $jqm.mobile.cache =  savePageInDOM;
})
此代码在加载页面之前激活,您可以使用url.indexOf()确定url是否是要缓存的url,并相应地设置缓存参数


不要使用window.location=“”;若要更改URL,您将导航到该地址,pagebeforeload将不会启动。为了解决这个问题,只需使用window.location.hash=“”

另一种只在需要从服务器获取数据时才放下线的方法是将下线与ajax url一起追加

“?=”+Math.round(Math.random()*10000)

此代码可能对您有所帮助

var sr = $("#Search Result");
sr.load("AJAX-Search.aspx?q=" + $("#q")
.val() + "&rnd=" + String((new Date).getTime())
.replace(/\D/gi, ""));

如果您想继续使用Jquery的.load()方法,请在URL中添加一些独特的内容,比如JavaScript时间戳。“+新日期().getTime()”。请注意,我必须添加一个“&time=”以便它不会改变pid变量

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

您可以将jquery加载函数替换为缓存设置为false的版本

(函数($){
var_load=jQuery.fn.load;
$.fn.load=函数(url、参数、回调){
如果(url的类型!=“字符串”&&&&U加载){
返回_load.apply(这是参数);
}
变量选择器、类型、响应、,
self=这个,
off=url.indexOf(“”);
如果(关闭>-1){
选择器=stripeandcollapse(url.slice(off));
url=url.slice(0,关闭);
}
//如果它是一个函数
if(jQuery.isFunction(params)){
//我们假设是回调
回调=参数;
参数=未定义;
//否则,构建一个参数字符串
}else if(参数和类型参数==“对象”){
type=“POST”;
}
//如果我们有需要修改的元素,请提出请求
如果(自我长度>0){
jQuery.ajax({
url:url,
//如果“type”变量未定义,则将使用“GET”方法。
//使此字段的值显式,因为
//用户可以通过ajaxSetup方法覆盖它
类型:键入| |“获取”,
数据类型:“html”,
cache:false,
数据:params
}).done(函数(responseText){
//保存响应以在完整回调中使用
响应=参数;
html(选择器?
//如果指定了选择器,请在虚拟div中找到正确的元素
//排除脚本以避免IE“权限被拒绝”错误
jQuery(“”).append(jQuery.parseHTML(responseText)).find(选择器):
//否则使用完整结果
响应文本);
//如果请求成功,此函数将获取“数据”、“状态”、“jqXHR”
//但它们被忽略,因为响应设置在上面。
//如果失败,此函数将获得“jqXHR”、“status”、“error”
}).always(回调函数和函数(jqXHR,状态){
self.each(函数(){
apply(this,response | |[jqXHR.responseText,status,jqXHR]);
});
});
}
归还这个;
}
})(jQuery);

将它放在全局的某个地方,在jquery加载后它将运行,您应该已经做好了准备。您现有的加载代码将不再被缓存。

谢谢!这甚至可以在jQuery文档中找到吗?啊。。。找到了。有点像浆果。这一天的大部分时间都是被踢屁股。。。再次感谢!所有这些cache:false都是在发出请求时在url的末尾附加一个数字(我相信这是一个时间戳)。ot
$('#searchButton').click(function() {
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val()+'&time='+new Date().getTime());            
});