2013-07-23 49 views
5

我有類似如下:

$(".remove-item").click(function(e) { 
    e.preventDefault(); 

    var url = $(this).attr('href'); 
    var id = $(this).data("id"); 
    $.when(removeItem(url)) 
     .then(removeItemResponse(id)); 
}); 

var removeItemResponse = function(data, id) { 
    console.log(data); 
    console.log(id); 
}; 

var removeItem = function(url) { 
    return $.post(url); 
}; 

以上不工作的,我什麼也沒得到日誌中的AJAX請求被處理後,我知道它有什麼與我如何解決removeItemResponse中的參數有關。我需要從ajax文章中使用返回的數據,但也傳遞了我在click函數中檢索到的id。

+0

定義了removeItem嗎? – marteljn

+0

你告訴我們一切,但的removeItem,你能做到嗎? – Jonast92

+0

我不認爲'removeItem'是相關的。知道它是如何定義的將無助於將'id'傳遞給.then回調函數。 –

回答

9

removeItemResponse(id)立即執行的功能,而你沒有通過第一次推遲的結果。試試這個:

.then(function(data) { removeItemResponse(data, id) }); 

done()也是在這裏工作:

.done(function(data) { removeItemResponse(data, id) }); 

您可以簡化和處理故障,像這樣:

removeItem(url) 
    .done(function(data) { removeItemResponse(data, id) }); 
    .fail(function(result) { /* do something else */ }); 
+0

謝謝,這有幫助。 – Gregg

2

你的時候/然後,他們不」濫用這裏適用。剛剛從removeItem返回的承諾使用.done。將通過AJAX請求的結果(假設它返回一個$.ajax調用或類似返回的承諾),然後就可以通過該結果,併到您的處理功能的ID:哪裏是

removeItem(url).done(function (data) { 
    removeItemResponse(data, id); 
}); 
+0

我想一個單獨的函數來處理非200狀態響應,並且它是工作在這方面。我如何「濫用」它? – Gregg

+0

時/然後有一個特定的目的,這是不是。你發佈的代碼可以用一個'.done'完成。 – meagar

+0

謝謝,這很有道理。 – Gregg