2013-05-20 102 views
0

我想要$.when與我的代碼一起工作。這種情況是,我有一個方法可以觸發大量的Ajax請求,並且我想在請求符文的時候爲用戶顯示一個加載篩選器。什麼時候是這樣我可以隱藏它之後。鑑於我所瞭解的$.when應該是下面的代碼工作,但時間函數永遠不會被解僱。

self.createTaggingDialog(self); 
var ajaxArray = new Array(); 
self.containers.each(function() { 
    var ImageClass = $(this).ImageTags(); 
    if (ImageClass != null) { 
     ajaxArray.push(ImageClass.TagUser(ImageClass, username)); 
    } 
}); 
$.when(ajaxArray, function() { 
    console.log("DONE!"); 
    self.RemoveTagggingDialog(self); 
}); 

這裏是ajaxArray的值,當它達到$。當 enter image description here

的TagUser:

TagUser(self: ImageTags, username: string) { 
    return $.ajax({ 
     type: "POST", 
     url: self.options.UrlTagUser, 
     data: { 
      username: username, 
      imageid: self.options.ImageId 
     }, 
     success: function (data: UserAddJson) { 
      if (data.Successful) { 
       if (self.AddUserElement != null) { 
        self.AddUserElement.find('input').val(''); 
        self.AddUserElement.modal('hide'); 
       } 
       self.TagUserSuccess(self, data); 
      } else { 
       self.TagUserError(self, data.Message); 
      } 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      self.TagUserError(self, ""); 
     } 
    }); 
} 
+1

我想'self.containers .each'不是異步的,那麼爲什麼你需要一個通常爲u的'jQuery.when' sed延期?只要把你的代碼從循環下面的回調中循環通過一個集合... –

回答

2

嘗試

$.when.apply($, ajaxArray).done(function() { 
    console.log("DONE!"); 
    self.RemoveTagggingDialog(self); 
}); 
+1

不應該'''作爲上下文而不是'window'傳遞? – m90

+0

@ m90是的可能必須 –

+0

@ m90這個樣本http://jsfiddle.net/arunpjohny/qJ6fY/似乎與'窗口'作爲第一個參數工作 –