我的服务器上必须有某种服务器端缓存......
每当我使用jquery ajax请求内容时,我都会得到相同的数据,即使我用
替换服务器端代码echo('hello, world!');
使用过的配置:
哪种缓存可以有效?
正如您所看到的,我已经实现了两个代码来阻止javascript中的浏览器缓存。问题肯定在服务器端。
仅供参考:
客户端代码:
// Add a timestamp to url to prevent browser from caching ajax content
var date = new Date();
var timestamp = date.getTime();
var nocache = '&nocache=' + timestamp;
// Ajax call: get entries, add to entries div
$.ajax({
type: "POST",
url: "jsfeed.php",
//data: "lastmsg="+ ID,
data: "<?php echo("key=$api_key&fc=$collection_ident&offset="); ?>" + (ID+1) + "<?php echo("&showmax=$showmax&nocontainer" . $jstaggedonly); ?>" + nocache,
cache: false,
success: function(html) {
$("div#updates").append(html);
$("#more"+ID).remove();
}
});
服务器端代码:
if( isSet($_POST['offset']) && isSet($_POST['showmax']) )
{
$offset = $_POST['offset'];
$showmax = $_POST['showmax'];
$new_offset = $offset + $showmax;
$call = $api_url . 'jsfeed.php?' . $_SERVER['QUERY_STRING'];
$html = file_get_contents($call);
echo($html);
// ...
}
修改
如果您想要have a look - 我正在测试的页面(限时在线)...在更新列表下方搜索“显示更多”按钮。这是触发ajax调用的地方。
修改
我解决了这个问题。我的脚本出错了。没有必要手动附加时间戳,就像我上面所做的那样。 jQuery选项cache: false
就足够了。所以,它看起来像这样:
// Ajax call: get entries, add to entries div
$.ajax({
type: "POST",
url: "jsfeed.php",
data: "<?php echo("key=$api_key&fc=$collection_ident&offset="); ?>" + (ID+1) + "<?php echo("&showmax=$showmax&nocontainer" . $jstaggedonly); ?>",
cache: false,
success: function(html) {
$("div#updates").append(html);
$("#more"+ID).remove();
}
});
答案 0 :(得分:1)
如果没有明确告知服务器,某些浏览器会非常积极地缓存AJAX请求。
尝试类似的东西(取自php手册,php.net / header):
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
答案 1 :(得分:0)
您应该将时间戳添加到网址而不是发送的数据..
var nocache = '?nocache=' + timestamp;
和
$.ajax({
type: "POST",
url: "jsfeed.php" + nocache,