2012-02-13 93 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; });