ORDER BY RAND() 总是在 IE 上给出相同的行
Posted
技术标签:
【中文标题】ORDER BY RAND() 总是在 IE 上给出相同的行【英文标题】:ORDER BY RAND() always gives same row on IE 【发布时间】:2013-03-11 19:04:09 【问题描述】:我有一个 javascript 函数(由一个按钮调用),它对 php 文件执行 ajax 请求。 php 文件连接到数据库并从我的数据库中回显一个随机行。负责这个的php代码:
$value = $db->get_row("SELECT * FROM mytable ORDER BY RAND() LIMIT 1");
echo $value;
一切正常!在所有浏览器(IE 除外)上,我每次都可以按下按钮并获取随机行。但是在 IE 上它给了我相同的行,直到我刷新页面。 我在所有版本的 IE 上都试过了,直到我刷新页面,行才会改变。
知道它可能是什么吗?
提前致谢!
这里有更多代码:
function getdata()
var data = $.ajax(
url: "getmydata.php",
async: false
).responseText;
passdata(data);
编辑:我知道 ORDER BY RAND 不好,但我只有 10 行!
【问题讨论】:
为什么是async: false
?
可能缓存在客户端。 SQL 查询不受用户代理的影响。
@GNi33:如果我错了,请纠正我?同步请求可以锁定ajax状态和浏览器。
@NabRaj 你是对的。这使得async: false
令人困惑:)
@NabRaj 确切地说,此函数将阻塞直到 Ajax 调用完成,请考虑使用回调函数。至于您的问题,您是否尝试过在呼叫中添加更改参数?喜欢data: 'cacheParam' : Math.floor(Math.random()*1000)
?
【参考方案1】:
是的,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;
这些解决方案中的任何一个都足够了。
【讨论】:
我的想法也是,只记得这甚至内置在jQuery.ajax
- 函数中,使用cache
- 属性并将其设置为false
感谢 mellamokb 和 GNi3,他们成功了!我在请求中添加了 Math.random() 和 cache: false 。干杯!
@NabRaj:请注意,应用这两种解决方案是多余的,因为它们都同样足够。
@NabRaj 不需要同时设置它们,只需使用cache:false
就足够了 :) 因为在幕后,jQuery 除了设置这样的参数之外什么也没做
再次感谢,删除了 Math.random()。我更喜欢缓存:假!干杯!以上是关于ORDER BY RAND() 总是在 IE 上给出相同的行的主要内容,如果未能解决你的问题,请参考以下文章
ORDER BY RAND()函数在mysql中执行需要很长时间[重复]
MySQL 查询优化与 group by 和 order by rand