JQuery $ .ajax回调适用于FF和Safari,但不适用于IE

时间:2009-08-19 03:53:32

标签: jquery ajax internet-explorer

我正在使用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中失败。关于解决方案的任何想法?

1 个答案:

答案 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");