[英]Call a function inside Ajax
我遇到問題,無法在此代碼內循環:
class ProductsPager
constructor: ->
this.waitformsg()
waitformsg: =>
alert 'begin'
$.ajax
type: "GET"
url: "http://0.0.0.0:3000/live/index.json"
async: true
cache: false
timeout: 1000
success: (data) ->
alert data
error: (XMLHttpRequest, textStatus, errorThrown) ->
alert "end"
waitformsg()setTimeout "waitformsg()", 0
這兩個警報器用於調試。 它只顯示一次:“ 開始 ”,僅顯示“ 結束 ”之后,僅顯示一次。
我已經得出結論,最后一行是錯誤的,我需要找到一種在Ajax中調用方法的方法。
我試圖用this.waitformsg()
甚至waitformsg()
替換setTimeout "waitformsg()", 0
,但是它仍然無法正常工作。
我想展示無限的“警報”,直到收集成功的正確條件。
這兩個:
waitformsg()
setTimeout waitformsg, 0
無法使用,因為范圍中沒有waitformsg
函數。
這個:
setTimeout "waitformsg()", 0
由於沒有名為waitformsg
全局函數,因此不會工作, setTimeout
的字符串形式將在全局上下文中執行該字符串。 我建議您忘記setTimeout
甚至具有字符串形式。
您應該使用粗箭頭( =>
)將回調綁定到當前上下文:
waitformsg: =>
alert 'begin'
$.ajax
#...
error: (XMLHttpRequest, textStatus, errorThrown) =>
alert "end"
@waitformsg()
如果您希望錯誤處理程序等待一秒鍾再嘗試:
setTimeout @waitformsg, 1000
因為您waitformsg
方法定義為綁定函數,所以它將在正確的上下文中運行。
我在這里的其他幾件事:
使用@
在CoffeeScript中更地道比使用this
所以你的構造應該是:
constructor: -> @waitformsg()
jQuery的$.ajax
標志async:true
已被棄用,因此您應該停止使用它。 對於用戶(尤其是在循環中), async:true
也是一件令人討厭的事情,因此,再次,您應該停止使用它。
我沒怎么玩CoffeeScript,所以這是您在Javascript中的處理方式:
waitformsg: function() {
var self = this;
...
...
error: function(XMLHttpRequest, textStatus, errorThrown) {
self.waitformsg();
};
};
當您簡單地調用waitformsg()
,您基本上是在調用window.waitformsg()
。 由於不存在,因此您的代碼不起作用。 你不能用this
,因為回調是異步的,這樣的價值this
是幾乎任何的jQuery將其設置為(如果它設置它在所有)時, error
回調被調用。 所以,你需要保持一個參考this
是被流傳下來到靠近酒店,你可以通過在函數的局部范圍內建立一個新的變量和分配做this
該變量(在這種情況下,我已經叫該新變量self
)。 然后可以調用self.waitformsg();
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.