我在下面有这个功能,我在循环中调用该函数 我得到警报n次,但只有n-1或有时n-2个回复
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
alert(xmlhttp.responseText);
//document.getElementById("warnings_panel").innerHTML+=xmlhttp.responseText;
}
}
alert("in ajax)
xmlhttp.open("GET","getresponse.php?start="+ start
+ "&end=" + end,true);
xmlhttp.send();
答案 0 :(得分:1)
您似乎依赖于单个全局xmlhttp
变量。不要那样做。
答案 1 :(得分:1)
确保您为每个请求发送一些独特的内容。 IE有时会缓存AJAX请求响应 - 如果您追加查询的唯一内容(例如随每个请求递增的计数器),它将阻止IE返回缓存的响应。
答案 2 :(得分:1)
<html>
<body>
</body>
<script type="text/javascript" defer>
function ajaxping() {
var xmlhttp ={};
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
{
var status = xmlhttp.status;
var isSuccess = status >= 200 && status < 300 || status === 1223 || status === 304;
if(isSuccess) {
alert("got success response");
}
}
}
alert("in ajax");
xmlhttp.open("GET","test.html");
xmlhttp.send();
}
var func = function() {
for(var i=0;i<10;i++){
ajaxping();
}
}
func();
</script>
</html>
答案 3 :(得分:1)
当您使用循环发送ajax请求并使用单个对象时,即使在发送第一个请求的响应之前,也有可能发送第二个或连续的请求。
因此,请使用单个对象发送个别请求。
示例代码应该是这样的..
for(i=0; i<10; i++){
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
eval("xmlhttp"+i+"=new XMLHttpRequest()");
}
else
{// code for IE6, IE5
}
eval("xmlhttp"+i+".onreadystatechange=function(i)");
function(var obj)
{
//function contents
}
alert("in ajax)
// assign responsetext and send code
}
答案 4 :(得分:1)
xmlhttp.open("GET","getresponse.php?start="+ start
+ "&end=" + end,true);
在上面一行中,您提到了true作为最后一个参数,而不是使用false。
因此,AJAX成为同步呼叫,interprter将等待响应到达。
但是对于每个响应检查为null。