2014-01-15 24 views
0

我正在使用AJAX發送一個字符串化爲JSON的集合。它被解碼,驗證並保存到會話中。Coffescript,Backbone - jQuery.ajax完成回調函數作用域

它適用於Firefox - $ _SESSION ['key']可用,它在Chrome中不起作用。

我認爲在使用window.location.href ='checkout'時,AJAX完成發射時出現了問題。我想解決它,但我不能從內部完成回調或從ajaxdone方法登錄。

我不明白爲什麼添加'=>'沒有幫助。它將整個對象緩存到_this,不是嗎?

send: (data) -> 
    console.log this 
    jQuery 
    .ajax({ 
     type: "POST", 
     url: 'checkout', 
     data: {order: data}, 
     dataType: 'json', 
     done: (data) => 
     this.ajaxdone() 
    }) 
    this 

ajaxdone: -> 
    #window.location.href = 'checkout' 
    console.log this 
+0

你需要「催肥」對方箭頭:'派:(數據)=>' – Tallmaris

+0

你最好使用骨幹實踐,而不是重寫你自己的Ajax調用/回調[例如,你可以重寫同步方法]。 – moonwave99

+0

@ moonwave99我想我應該,但真正的問題是:我怎麼做才能成功執行console.log從內部完成回調?我認爲我理解JS如何工作得很好,似乎我沒有。 –

回答

1

沒有done選項$.ajax。有一個complete選項,它是

當請求結束時(執行成功和錯誤回調後)調用。

所以也許你的意思是:

jQuery.ajax(
    #... 
    complete: => @ajaxdone() 
) 

代替。有一個done方法上jqXHR所以你可以說:

jQuery.ajax(
    #... 
).done => @ajaxdone() 

done是「另一種結構的success回調選項」,所以如果有錯誤,否則它將不會被調用。如果你想ajaxdone總是被調用,然後使用always(其作用類似於complete選項):

jQuery.ajax(
    #... 
).always => @ajaxdone() 
+0

謝謝!那就是訣竅。 –

相關問題