ORDER BY RAND()总是在IE上给出相同的行

时间:2013-03-22 02:17:39

标签: php jquery html sql ajax

我有一个javascript函数(由按钮调用),它对php文件执行ajax请求。 php文件连接到数据库并从我的数据库中回显一个随机行。 php代码负责:

$value = $db->get_row("SELECT * FROM mytable ORDER BY RAND() LIMIT 1");
echo $value;

一切正常!在所有浏览器(IE除外)上,我可以按下按钮并每次都获得randow行。但是在IE上,它给了我相同的行,直到我刷新页面。 我尝试了IE的所有版本,在刷新页面之前行不会改变。

知道它可能是什么吗?

提前致谢!

以下是更多代码:

function getdata(){
    var data = $.ajax({
            url: "getmydata.php",
            async: false
        }).responseText;

    passdata(data); 
}

编辑:我知道ORDER BY RAND很糟糕,但我只有10行!

1 个答案:

答案 0 :(得分:4)

是的,IE因积极缓存请求而忽略HTTP标头而不缓存内容而臭名昭着。在我们的应用程序中,当我们有一个AJAX请求必须从服务器刷新时,我们在URL中使用缓存清除随机数:

url: "getmydata.php?rand="+Math.random()

?用于添加querystring parameters,如果您不处理请求,则会对请求产生影响。由于url每次都是唯一的,因此永远不会被缓存。


修改:正如@ GNi33所指出的那样,jQuery.ajax中已经内置了一个强制缓存清除的功能,其中名为cache的参数设置为false }:

var data = $.ajax({
    url: "getmydata.php",
    cache: false,    /* ADD THIS to prevent IE caching */
    async: false
}).responseText;

这些解决方案中的任何一个都足够了。