首先,我必须道歉,我知道类似于我将要提出的问题之前已被问过,但这些问题中给出的答案或建议都不适用于我。
继承人的故事:
我编写了一个向服务器发送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调用时遇到缓存问题;但是,确保请求不起作用不起作用。
有没有人知道为什么会这样?这让我绝对疯狂!
非常感谢任何建议。
干杯
答案 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);
?>
希望我可以帮助这个人!