传递计数值以发布数据jquery

时间:2014-08-13 13:47:38

标签: jquery ajax loops post

您好我在for

中使用jquery post方法遇到了一些问题

这是我的代码

$(document).ready(function() {
 $("#fetch").submit(function(event) {
  for (i = 1; i < 6; i++) {
   $.post("script.php", $(this).serialize() + "&id=" + i).done(function(data) {
    username = $(data).find(".normal").text();
    console.log(i + username); // only username is shown
   });
  }
  event.preventDefault();
 });
});

在控制台中使用此代码我只看到用户名,而且我没有按照正确的顺序看到它们 陈(身份证3的用户名) 测试(id为1的用户名) Cal(id为4的用户名)等......

我们非常感谢您对这段代码中的任何帮助或建议。 我现在试图让代码变得简短而简单,因为以后它会变得更加复杂

1 个答案:

答案 0 :(得分:0)

新答案 延迟呼叫5秒钟的伎俩适用于许多情况但不适用于所有情况。因为ajax必须在几秒钟内完成,否则问题将无法解决

你可以通过递归来实现这个目标

function fun1 (i)
{


 $.ajax({
url: url,
data: datatobesend, // plus i value if you need to send 
async :false
})
 .done(function() {
    //your code here 
    })
.always (function()  {
 if(i==6)
{return 0}
else
{
fun1 (i+1) // this will call after first ajax call complete 
}
});

}

这将是全面的,因为我认为,如果可能有错误,我需要修改,我没有在我的网站上测试过,并且不要求异步:false

****************旧答案************************** **

是的,你是对的,它可能不会串行,因为你正在发出ajax请求意味着请求将与java脚本执行异步。

所以可能会发生ID = 1的请求迟到ID = 2的时间,因此ID = 2的输出将首先打印而不是ID = 1

要使它们同步,您需要使用jquery $.ajax方法

编辑回答

$.ajax({
url: url,
data: datatobesend,
async :false
})
 .done(function() {
    //your code here 
    });

keep async false会使您的请求同步,参考:Jquery $.ajax