我正在研究正在进行ajax调用的应用程序,并且我遇到了一些相当奇特的行为,有时当ajax调用被触发时它会复制自己而第二个完成但是我没有得到回复和原始的继续加载永远这是当再次触发ajax调用或我点击刷新时修复。
问题是我无法重现这种行为,因为它是随机发生的。大部分时间选项卡处于打开状态且我在不同的选项卡或程序上。
我唯一注意到使用firebug的是响应标头似乎有问题。
与成功通话相比,他们的顺序不同,部分信息完全丢失。我Content-Type
中定义的text/html
类型总是比$.ajaxSetup
更多。
$.ajaxSetup({
dataType:'html',
cache:false,
type:'POST',
timeout:15000,
error:function() {
alert('Action aborted please try again');
},
complete:function(XMLHttpRequest,textStatus){
//console.log('XMLHttpRequest.readyState : '+XMLHttpRequest.readyState+'\nXMLHttpRequest.statusText : '+XMLHttpRequest.statusText+'\nXMLHttpRequest.status : '+XMLHttpRequest.status+'\ntextStatus : '+textStatus);
}
});
以及我的ajax调用示例:
var dataString = 'value='+value+'&value1='+value1+'&value2='+value2;
$.ajax({
url:'file.php',
data:dataString,
success:function(resp){
alert(resp);
}
})
在我添加dataType
之前,这种行为发生得更频繁,而且当使用xampp在winXP SP3机器上本地查看时更常发生这种情况,我认为它们都是firefox和IE。
我已经在运行Windows服务器2008的服务器和apache和php standalones进行了测试,而不是xampp,而且发生的情况更少。 从我的家用电脑上,几乎从未发生上述测试是在我的办公室电脑上。
有没有人遇到过类似的行为,或者有没有办法以不同的方式编写我的ajax调用。
我想避免使用插件,长时间的轮询似乎在apache服务器上有点沉重。
答案 0 :(得分:0)
您使用jquery ajax调用的方式在技术上是正确的。我要提出的一个建议是不要手动构建数据字符串。您可以将对象文字传递给data参数,并让jquery为您执行字符串转换。这有一个额外的好处,让jquery执行适当的转义,有时可能会混乱XMLHttpRequest 除此之外,我建议使用firebug的console.trace()命令来查看你实际上是在做两个.ajax调用以及为什么。你可以在你的ajaxSetup中设置一个'beforeSend'监听器 - 可能是一个放置它的好地方。
答案 1 :(得分:0)
你的意思是这样的:
var dataString= {
value: value,
value1: value1
};
我几乎可以肯定,一次只能激活一个呼叫,但如果它需要太长时间,它会复制自身并继续永久加载。
我附上了来自firebug的截图: