在jquery中完成之前停止执行另一个

时间:2013-09-06 11:08:46

标签: javascript jquery ajax

我在jquery的for循环中使用$ .ajax。

for(var i=0; i < 2; 1++)
{

$.ajax({
url :"/models/getdata"+i
dataType:"json"
success:function(data)
{
}
});

}

在成功之前i = 0; i = 1来执行此值的ajax请求。我希望下一次迭代需要等到当前的迭代完成。

表示一个ajax请求成功完成,然后它将递增i值,然后开始下一次迭代。

考虑另一种情况

function A()
{
$.ajax code

}
/////another operation

这里函数A()需要等到它的ajax post完成。但在我的情况下,它转到下一个代码开始执行如何在当前函数完成之前停止进一步执行。喜欢C#中的睡眠概念

我该怎么做?

谢谢,

希瓦

4 个答案:

答案 0 :(得分:3)

一个简单的通用解决方案:

var i=0;
(function doOne(){
    $.ajax({
        url :"/models/getdata"+i
        dataType:"json"
        success:function(data){
            if (++i<2) doOne();
        }
    });
})();

对于第二种情况,您可以使用$ .ajax返回的deferred

function A() {
   return $.ajax(...)
}

A().done(function(){
   // some code executed after the ajax call finished
});

答案 1 :(得分:0)

在ajax调用中设置async: false

答案 2 :(得分:0)

此方法可能是解决此问题的最佳方法。

$.when(*AJAX CALL*)
    .then(function() { // Function to run after ajax is completed
});

答案 3 :(得分:-1)

默认情况下,当我们使用$.ajax时,所有请求都是异步发送的。异步,我的意思是,Web应用程序可以在不干扰现有页面的显示和行为的情况下向服务器(在后台)发送数据和从中检索数据。但是您希望在请求完成之前停止执行,因此将async设置为“false”。

使用此 -

$.ajax({
    url :"/models/getdata"+i
    dataType:"json",
    async: false,
    success:function(data)
    {
    }
 });