我正在使用jQuery查询数据库并更新出价和询问货币交易代码的价格表。我正在使用$ .ajax将货币符号发送到查询数据库的php脚本,并返回javascript解析的xml文档以对表进行更新。一切都在PC / Mac和Safari上的FireFox中工作,但在IE中不起作用。相关代码......
jQuery进行ajax调用:
var updateDataFunction = function () {
$.ajax({
url: "func2.php",
type: "GET",
data: "symbol=<?php echo $stock; ?>",
dataType: "xml",
success: function (msg) {
var bid = $('bid',msg).text();
var ask = $('ask',msg).text();
var spread = $('spread',msg).text();
// do some other stuff
}
});
};
该脚本使用php在javascript运行之前将库存放入javascript中。 updateDataFunction在$(document).ready。
中调用php脚本
<?php
header("content-type:text/xml;charset=utf-8");
// connect to the database
function GetUpdate($symbol) {
$query = "SELECT * FROM tblSG WHERE strSymbol='$symbol'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$spread= $row['fBid'] - $row['fAsk'];
$output="<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<exchange>\n";
$output.="<bid>" . number_format($row['fBid'],4) . "</bid>\n";
$output.="<ask>" . number_format($row['fAsk'],4) . "</ask>\n";
$output.="<spread>" . number_format($spread,4) . "</spread>\n";
$output.="</exchange>";
}
return $output;
}
$symbol = $_GET['symbol'];
echo GetUpdate($symbol);
?>
使用POST代替GET会导致它在FF和Safari中失败。关于解决方案的任何想法?
答案 0 :(得分:2)
好的,使用建议的Fiddler应用程序来检查服务器响应,我注意到它正在点击服务器,但只有一次在FireFox中,它按照预期每两秒点击一次服务器。由于更新间隔较短,我从未注意到IE中的更新。经过进一步调查,如果稍后提出相同的请求,IE显然会缓存所有GET请求并重新提供旧请求。要防止这种情况,您必须将标头信息发送到浏览器以不缓存结果。将以下代码添加到content-type声明下面的php脚本中解决了问题:
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");