0

在发送 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++;
        }

这里还有一张关于萤火虫发生的照片: 萤火虫错误照片

4

3 回答 3

1

您可以通过 延迟执行第二种方法setTimeout,但是,这不是 Javascript 中执行此操作的最佳方法。

当来自服务器的响应到来时,您可以执行回调。该回调应该处理您的响应并发送下一个请求。

使用库来处理 AJAX 是很常见的,我相信您使用的库有大量关于回调问题的文档,可以帮助您入门。或者,在纯 JS 中,您可以查看作为onreadystatechange回调的 XHR 对象的属性。

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

于 2013-09-04T14:42:32.330 回答
1

发送一个 HTTP 请求我希望下一个请求稍等片刻,让我得到前一个请求的响应。

您在此处定义回调的用例。

AJAX 函数通常有一个成功或完整函数,您可以将一个函数绑定到该函数,该函数将在响应返回时触发。只要一个结果不依赖于前一个结果,您就可以在循环中进行 ajax 调用,并且回调将独立处理每个响应的处理,因此您不必在代码中稍等片刻,它只是由触发回调的事件。

http://api.jquery.com/jQuery.ajax/

查看 jquery ajax 调用的“完整”参数。

于 2013-09-04T14:54:08.007 回答
0

JavaScript 没有 sleep 函数,它的性质使 sleep 函数破坏了一些东西。

您可以延迟运行的功能,setTimeout但是(以及任何神话般的睡眠功能)将要求您知道发送请求和获得响应需要多长时间……而您无法知道这一点,因为网络不是那么可预测的。

如果您想等到收到响应后再发送新请求,请将发送新请求的代码放在前一个的load/readystatechange处理程序中。

于 2013-09-04T14:39:19.303 回答