Jquery ajax调用之间的时间延迟
我正在尝试调用一次返回一行信息的服务。我要拿100行这样的。我希望每次点击服务之间有一个特定的时间间隔。不一定要精确,但至少200毫秒。我一直在使用jquery进行调用。比如:Jquery ajax调用之间的时间延迟,jquery,ajax,Jquery,Ajax,我正在尝试调用一次返回一行信息的服务。我要拿100行这样的。我希望每次点击服务之间有一个特定的时间间隔。不一定要精确,但至少200毫秒。我一直在使用jquery进行调用。比如: for 1 to 100 window.setTimeout(function(rowNumber){ $.ajax({ url: datatype: 'json' async:false success: function to display row });
for 1 to 100
window.setTimeout(function(rowNumber){
$.ajax({
url:
datatype: 'json'
async:false
success: function to display row
});
}, 10000, someParam);
另外,我在xmlhttp.onreadystatechange
函数中有这个调用。
发生的情况是,我在开始时得到了10秒的延迟,但随后所有行都出现了雪崩。每次通话之间我都需要延迟
谢谢 只需使用循环变量作为时间的乘数即可实现:
for (var i=0;i<100;i++) {
window.setTimeout(function(){
$.ajax({
url:
datatype: 'json'
async: false
success: function to display row
});
}, i * 200);
}
for(var i=0;i首先,您需要考虑在服务器中创建一个批量操作,以便在一次快照中重播所有信息
另一个重要的概念是,避免同步连接。在您的情况下,100连接将在同步过程中阻塞浏览器
所有元素都在同一时刻写入以供同步使用,浏览器被阻止以写入dom中的任何元素
第一:
请记住,浏览器有调用限制,用户确实可以在此配置中更改它,也许这不是您的解决方案,但将概念引入到第二个和第三个解决方案中,在这种情况下,我们会同时请求所有请求
HTML
JS
函数插入位置(位置,文本){
var元素=$(“#结果>li:n子项(“+(pos+1)+”),
html=''+text+' ';
if(element.length==0){
$(“#结果”).append(html);
}否则{
元素之前(html);
}
}
$(文档).ready(函数(){
对于(var i=0;i
基本上,您在循环中调用ajax,并且您需要确保在正确的位置添加新元素。insertPosition测试如果您已经在该位置有一个元素,如果您有一个,则函数将在该元素之前插入该元素。如果您没有,则他们将该元素插入最后一个位置。
另一个重要的函数是bind。
不,等等,当我有元素时,我会将它添加到列表中
第二个(相同的html):
var callbackFunction=function(num、max、returnhtml){
num++;
$(“#result2”).append(“”+returnhtml+” ”);
if(numsorry)格式!我无法使代码格式正常工作。也许我遗漏了一些东西。我对Ajax不太了解,但是如果您接受编辑,您的文章应该立即格式化。为了将来参考,您可以突出显示您的代码并使用{}
按钮,或缩进您的代码4个空格。忘记这一点……我想您的问题已经得到了回答是的。我在这里用了10秒只是为了测试。另外,我不确定window.setTimeout为什么不起作用。这并不是说我是jquery或JS方面的专家。计时需要精确吗?或者只要介于10秒之间,您是否满意n?这似乎确实有效。谢谢,但如果你能给出一些简短的解释,那会有所帮助。它在一个循环中。我有一个setTimeout。那么为什么它不在每次调用后等待呢?ajax调用是否发生在不同的执行线程中?每个setTimeout调用都是异步的,这就是为什么它只在每次其他调用完成后运行。循环刚刚设置这是运行的时间,里面的代码将在200毫秒后运行。第二个超时将在400毫秒后运行,等等。请注意,如果请求的最长时间超过200毫秒,则此代码无法按预期工作,并且您有一个随机错误。@劳尔马汀您能给出一个证明吗?这是一个随机错误,请执行几次,然后查看数字是否总是在t中他遵守了正确的秩序。
<ul id="result"></ul>
function insertPosition(pos, text){
var element = $("#result > li:nth-child(" + (pos+1) + ")"),
html = '<li>' + text + '</li>';
if (element.length === 0) {
$("#result").append(html);
} else {
element.before(html);
}
}
$(document).ready(function() {
for(var i = 0; i < numberRequest; i++) {
$.ajax({
url: '/echo/html/',
type: 'POST',
data: 'html=' + i,
cache: false,
success: insertPosition.bind(this, i)
});
}
});
var callbackFunction = function(num, max, returnhtml){
num++;
$("#result2").append('<li>' + returnhtml + '</li>');
if (num<max) {
callAjax(num,max);
}
};
function callAjax(num,max){
$.ajax({
url: '/echo/html/',
type: 'POST',
data: 'html=' + num,
cache: false,
success: callbackFunction.bind(this, num, max)
});
}
$(document).ready(function() {
callAjax(0,numberRequest);
});
var callbackFunction2 = function (num, max, returnhtml) {
num++;
$("#result3").append('<li>' + returnhtml + '</li>');
if (num < max) {
setTimeout(window.callAjax2.bind(window, num, max), 500);
}
};
function callAjax2(num, max) {
$.ajax({
url: '/echo/html/',
type: 'POST',
data: 'html=' + num,
cache: false,
success: callbackFunction2.bind(this, num, max)
});
}
$(document).ready(function () {
callAjax2(0, numberRequest);
});