在发送HTTP请求的http请求的while循环中我希望下一个请求等待片刻让我从前一个请求获得响应。
setTimeout
函数会有帮助吗?
这是代码:
while(i <= 50){
http.onreadystatechange = function(){
if(http.readyState == 4){
getPosts(http.responseText , i);
//alert(http.responseText);
}
}
http.open("get","../php/php.php?q=getBody&id=comment"+i);
http.send();
//sleep(0); this another function in i send a request to php file to make asleep
i++;
}
这里还有一张关于萤火虫发生的事情的照片: firebug error photo
答案 0 :(得分:1)
您可以通过setTimeout
延迟执行第二种方法,但是,这不是在Javascript中执行此操作的最佳方法。
当来自服务器的响应到来时,您可以执行回调。该回调应该处理您的响应并发送下一个请求。
通常使用库来处理AJAX,我确信你使用的库有很多关于回调问题的文档,可以帮助你入门。或者,在普通JS中,您可以查看作为回调的XHR对象的onreadystatechange
属性。
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
答案 1 :(得分:1)
发送HTTP请求我希望下一个请求等待一段时间让我从前一个请求得到响应。
您在这里定义了回调的用例。
AJAX函数通常具有成功或完整的函数,您可以将函数绑定到响应返回时将触发的函数。只要一个结果不依赖于先前的结果,您就可以在循环中进行ajax调用,并且回调将独立处理每个响应的处理,因此您不必在代码中稍等一下,它只是由事件触发回调。
http://api.jquery.com/jQuery.ajax/
查看jquery ajax调用的“complete”参数。
答案 2 :(得分:0)
JavaScript没有睡眠功能,其本质使睡眠功能破坏。
您可以延迟使用setTimeout
运行的函数,但是(以及任何神秘的睡眠函数)将要求您知道发送请求并获得响应所需的时间...而您无法知道因为网络不是那么可预测的。
如果您想在发送新请求之前等待响应,那么请将代码发送到load
/ readystatechange
处理程序中以发送新请求。