2012-02-13 118 views
0
function foo(arg, ajaxcomplete) { 
    $.ajax({ 
    //ajaxcall... 
    success: function() { 
     //set ajaxcomplete to true 
    } 
} 

有什么办法可以做类似的事情知道ajaxcall在函数中完成了吗?谢谢Javascript out功能

+0

为什么不只是你需要在成功做什么'成功'回调?你甚至可以传递一个函数来成功调用。国际海事组织(IMO),在成功的时候设置一个标志来通知AJAX何时完成,这违背了你正在使用的回调模型。 – FishBasketGordo 2012-02-13 15:19:19

+0

你能澄清吗?也许包括一些描述你想要做的事情的psuedocode – 2012-02-13 15:19:22

回答

1

complete。它在错误或成功回调之后被解雇。从docs

function foo(arg, ajaxcomplete) { 
     $.ajax({ 
      success: function() { 
       alert('O.K.'); 
      }, 
      complete: function(){ 
       alert('We are done'); 
      } 
     }); 
    } 

描述:

完整(jqXHR,textStatus)功能,阵列 甲功能的请求完成(成功和错误回调之后被执行)时被调用。该函数获得两个参数:jqXHR(在jQuery 1.4.x中,XMLHTTPRequest)对象和一个字符串,用于分类请求的状态(“成功”,“未修改”,“错误”,“超时”,“中止”或“parsererror”)。从jQuery 1.5开始,完整的设置可以接受一组函数。每个函数都会依次调用。这是一个Ajax事件。

+0

您解决方案的主要问题是它根本没有对问题做出响应。 $ .ajax()是异步的,方法Foo()具有(非常非常非常非常可能)已经返回,因此为“ajaxcomplete”参数设置值已经太迟了 - 无论是成功还是完全回调。 – 2012-02-13 15:29:40

+0

@DidierGhys。他只需要将他的代码移到完整的回调中。 – gdoron 2012-02-13 15:32:03

+1

@downvoter。为什么你在这里投下所有的答案?! – gdoron 2012-02-13 15:32:45

1

success()函数仍然是知道您的AJAX调用已完成的方法。即使包装在一个函数中,它仍然是异步发生的,在你的情况下,功能foo()将可能已经完成并在success()函数被调用之前返回。

+0

成功是不够的。发生错误时不会被解雇。看到我的答案。 – gdoron 2012-02-13 15:24:49

0

您可以使用complete事件来设置所需的变量,因为无论请求成功还是失败,都会触发它。

function foo(arg, ajaxcomplete) { 
    $.ajax({ 
    //ajaxcall... 
    success: function() { 

    }, 
    complete: function(){ 
     //set ajaxcomplete to true here 
    } 
} 
+1

@downvoter - 请评论! – ShankarSangoli 2012-02-13 15:33:07

+0

他低估了这里的所有答案。我有一种不好的感觉,那就是这里的其他答案所有者之一。 – gdoron 2012-02-13 15:43:29

+1

这样的人应该被抛出SO。 – ShankarSangoli 2012-02-13 15:44:55

0

你可以有ajaxComplete参数作为回调:

function foo(arg, ajaxcomplete) { 
    $.ajax({ 
    //ajaxcall... 
    complete: function() { 
     ajaxcomplete(); 
     // Some other code here if required 
    } 
    } 

,你可以调用像这样:

var isComplete = false; 
foo('someArg', function() { isComplete = true; });