IE没有从jQuery ajax()调用返回结果

时间:2011-01-18 23:01:04

标签: jquery ajax internet-explorer

首先,我必须道歉,我知道类似于我将要提出的问题之前已被问过,但这些问题中给出的答案或建议都不适用于我。

继承人的故事:

我编写了一个向服务器发送ajax请求的函数,该服务器又运行一个php脚本,该脚本对数据库执行查询并返回一个html元素,特别是返回:<a href="mypage.php">Click here</a>。这是我的代码:

$('#txtHint').hide();

    function showReviews(str) {
        $.ajax({
            xhr: function() {
                 if ($.browser.msie)
                 {
                    return new ActiveXObject("Microsoft.XMLHTTP");
                 }
                 else
                 {
                     return new XMLHttpRequest();
                 }
            },
            url: "dropsearch.php",
            cache: false,
            type: "post",
            data: "q=" + str,
            dataType: "html",

    success: function(data) {
      $('#txtHint').append(data);
      $('#txtHint').show();
      window.alert(data);
    }
  });
}

现在,这在普通浏览器中完全正常,a标记在响应头中返回并附加到txtHint div。但是,使用Internet Explorer时,响应标头不会返回任何内容。我甚至使用了firebug和fiddler来确切地看到标题发送和返回的内容,并且出于某种原因,虽然IE发送正确的标题并接收一个,但它没有收到内容。 window.alert()调用只在IE中显示一个空警告框。

我一直在读到IE在ajax调用时遇到缓存问题;但是,确保请求不起作用不起作用。

有没有人知道为什么会这样?这让我绝对疯狂!

非常感谢任何建议。

干杯

2 个答案:

答案 0 :(得分:4)

IE会缓存类似的ajax请求。我经常使用的解决方法是将随机变量添加到需要关闭缓存的ajax调用中:

$('#txtHint').hide();

    function showReviews(str) {
        $.ajax({

            url: "dropsearch.php",
            cache: false,
            type: "post",
            data: "q=" + str+"&r="+Math.random(),
            dataType: "html",

    success: function(data) {
      $('#txtHint').append(data);
      $('#txtHint').show();
      window.alert(data);
    }
  });
}

此外,像@Jacob一样,您无需选择$ .ajax正在使用的请求类型。

答案 1 :(得分:2)

回答可能有点晚了。但是在过去的5个小时里,我自己一直在努力解决同样的问题。

在我的情况下,问题与包含在开头的空字符以及HTTP响应正文的各个部分有关。

我的解决方案是在将响应发送给客户端之前从响应中删除空字符。

在PHP中,您可以通过(例如):

执行此操作
<?
    $YOUR_RESPONSE = file_get_contents('http://example.com/sloppy_page');
    //If you already have your response stored in field, then just use that field
    echo str_replace("\0", '', $YOUR_RESPONSE);
?>

希望我可以帮助这个人!