2011-11-30 104 views
1

我在.each()函数的末尾有以下代码,循环近50次。暂停jQuery ajax脚本,直到脚本成功返回

$.ajax({ 
    type: "POST", 
    url: "/process.php", 
    data: "info="+info, 
    success: function(html){ 
     // $('#container').html(html);   
    } 
}); 

我怎么能在每次迭代期间暂停脚本,以便它会等到每个AJAX职位是执行下一.each()之前成功?

我基本上试图阻止ajax请求的排队。

+0

你试图阻止发出每个AJAX请求,直到后来的返回?出于什么目的? – wrschneider

回答

1

不要使用显式循环。将每个next-ajax调用移入前一个的success处理程序。或者queue the requests programmatically

var numRequests = 50; 

function nextAjax() 
{ 
    if (numRequests > 0) 
    { 
     $.ajax({ 
      // snip... 
      success: function (html) { 
       // $('#container').html(html); 
       nextAjax(); 
      }  
     }); 
    } 

    numRequests--; 
} 

nextAjax(); 
1

所有你需要做的就是添加一个async:false属性。例如:

$.ajax({ 
    type: "POST", 
    url: "/process.php", 
    data: "info="+info, 
    async: false, 
    success: function(html){ 
     // $('#container').html(html);   
    } 
}); 

但是,您应该知道,这将基本上“冻结”页面,直到完成所有AJAX调用。做出这样的同步请求几乎不是必需的,所以除非您在用户体验不重要的情况下进行某种内部使用,否则我强烈建议您尝试使用异步方式来实现你在追求。

+1

请不要这样做。这是UI挂起的一个重要原因。这已经讨论了很多地方,包括这里:http://stackoverflow.com/questions/5399080/can-this-be-done-without-synchronous-ajax –

+0

Eeeeeew,没有。当请求正在进行时,这将以最肮脏,不必要的方式挂起浏览器。 –

+0

对于99.9%的caes我完全同意。因此,我立即编辑。 – maxedison

0

有回调函数启动下一个请求。