如何打个睡眠功能?

时间:2013-09-04 14:34:47

标签: javascript http xmlhttprequest

在发送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

3 个答案:

答案 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处理程序中以发送新请求。