我有一个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。所以它要求新的副本,至少可以说是。
答案 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重置它!随机数!
感谢所有帮助我的人。我现在的头发少了很多。很抱歉,答案结果与问题本身无关。