是否缓存了AJAX对PHP脚本的请求?

时间:2016-12-21 05:26:15

标签: php ajax

我有一个shuffle和数组的PHP脚本,并根据一些参数以随机顺序返回它。如果我直接将脚本/参数输入到url中,PHP脚本的输出就像它应该是随机的。返回的数组被洗牌(我使用shuffle($array)来执行此操作)。

每当我通过AJAX调用它时,无论如何都会得到相同的结果。它将始终返回相同的顺序。我已经尝试将$ .get更改为$ .ajax并将缓存设置为false,它不起作用,我已经发送了一个参数以及$ .now()的$ .get请求来打破缓存。

无论我做什么,当我调用脚本时,它返回相同的顺序,但如果我直接在URL中找到它,没有问题,每次都是随机的。

请求看起来像这样:

$.get("scripts/findAnime.php", { q: JSON.stringify(params) }, function(data, status) {
    console.log(data);
});

没有任何缓存破坏,但是,就像我说的,我甚至尝试过缓存破坏方法,但没有任何工作。

PHP shuffle看起来像这样。有多个数组被放入$ generatedAnimeList中,但它们都经历了这样的过程。

如果我进行ajax调用并且只返回$ less,它每次都会返回相同的值,而不是随机洗牌。

if(!empty($least)) {
    shuffle($least);
    for($i = 0; $i < sizeof($least); $i++) {
        array_push($generatedAnimeList, $least[$i]['id']);
    }
    unset($least);
}

我不知道该怎么办。我以前有类似的代码,它完美地工作。

更新

所以我输入了剧本:

$temp = array(1,2,3,4,5);
shuffle($temp);
echo json_encode($temp);

请求每次都返回相同的“随机”顺序。所以请求的内容必须是错误的。

更新

清除浏览器缓存,什么也没做。仍然收到相同的答案。我确实发现了参数(q),我会得到一个不同的答案。所以基于上面的例子,我只是在洗牌一个数组。如果我发送值为“ALL”的q,它将始终返回相同的数字,如果我发送值为“ACTION”的q,它将始终返回相同的数字,但与q为“ALL”时不同

更新

我已将此事件删除至以下内容。发出get请求的JS文件:

$.get("scripts/findAnime.php"+$.now(), function(data, status){
    console.log(data);
}

和php脚本(findAnime.php)是这样的:

$temp = array(1,2,3,4,5);
shuffle($temp);
echo json_encode($temp);

无论如何,总是得到相同的“洗牌”结果。就我而言,每次都是[5,4,1,2,3]。

更新

我可以确认JS正在向PHP脚本发出请求,并且每次都返回200。所以它要求新的副本,至少可以说是。

2 个答案:

答案 0 :(得分:0)

在PHP脚本上添加以下标题:

header("Cache-Control: private, max-age=1");
header("Expires: ".gmdate('r', time()+1));

另外,检查服务器是否有其他缓存方法,如mod_PageSpeed和varnish

答案 1 :(得分:0)

<强>解决!!!!!

所以......我现在觉得自己像个白痴。实际上,这不是一个缓存问题,远非如此。在我的页面上,我将php srand函数设置为有一个种子,因为我的页面的一部分基于当天发生变化...

显然srand()函数也会影响shuffle()函数的随机性。

所以,在使用srand(mktime(0,0,0))后,我再次调用它,srand()和TADA重置它!随机数!

感谢所有帮助我的人。我现在的头发少了很多。很抱歉,答案结果与问题本身无关。