Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery$.ajax回调在FF和Safari中工作,但在IE中不工作_Jquery_Ajax_Internet Explorer - Fatal编程技术网

JQuery$.ajax回调在FF和Safari中工作,但在IE中不工作

JQuery$.ajax回调在FF和Safari中工作,但在IE中不工作,jquery,ajax,internet-explorer,Jquery,Ajax,Internet Explorer,我正在使用jQuery查询数据库,并更新货币交易报价器的出价和要价表。我使用$.ajax向php脚本发送货币符号,php脚本查询数据库并返回一个xml文档,javascript对该文档进行分析以更新表。FireFox在pc/mac和Safari上都可以正常工作,但在IE中不起作用。相关代码 发出ajax调用的jQuery: var updateDataFunction = function () { $.ajax({ url: "func2.php", t

我正在使用jQuery查询数据库,并更新货币交易报价器的出价和要价表。我使用$.ajax向php脚本发送货币符号,php脚本查询数据库并返回一个xml文档,javascript对该文档进行分析以更新表。FireFox在pc/mac和Safari上都可以正常工作,但在IE中不起作用。相关代码

发出ajax调用的jQuery:

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
        }
});
};
var updateDataFunction=函数(){
$.ajax({
url:“func2.php”,
键入:“获取”,
数据:“symbol=”,
数据类型:“xml”,
成功:功能(msg){
var bid=$('bid',msg).text();
var ask=$('ask',msg).text();
var spread=$('spread',msg).text();
//做些别的事情
}
});
};
在运行javascript之前,脚本使用php将库存放入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中失败。有什么解决方案吗?

好的,使用建议的Fiddler应用程序检查服务器响应我注意到它正在攻击服务器,但在FireFox中,它只会像预期的那样每隔两秒攻击服务器一次。由于更新间隔较短,我从未注意到IE中的更新。经过进一步调查,IE显然会缓存所有GET请求,如果以后发出相同的请求,则会重新服务旧请求。为了防止出现这种情况,您必须将标题信息发送到浏览器以不缓存结果。将以下代码添加到内容类型声明下方的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");

我假设当您将其更改为POST时,您正在将PHP代码更改为$\u POST。您可以使用$\u请求,这样服务器端就不需要知道它是post还是get。就错误而言,您是否收到JS错误?您是否使用Fiddler()?服务器的响应是什么?将此参数添加到$.ajax调用中:error:function(r,e){alert(e);}这将让您知道是否有任何错误。我猜IE会返回一个弹出窗口,上面写着“parsererror”,其他浏览器会继续正常工作。是的,当我从GET-to-POST更改它时,javascript和php中都发生了更改。安装了Fiddler2,从服务器得到的响应是HTTP/1.1 200 OK。原始响应也有text/xml头,但生成的xml出现在Fiddler的raw选项卡中,而不是xml选项卡中。添加错误警报代码不会在加载页面时弹出错误消息。