2013-07-23 9 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投稿から返されたデータを使用する必要があるだけでなく、私はクリック機能で取得したIDを渡します。

+0

ある場合は'removeItem'が定義されていますか? – marteljn

+0

あなたはremoveItem以外のすべてを見せてくれましたか? – Jonast92

+0

'removeItem'は関係ないと思います。どのように定義されているか知ることは、 'id'を.thenコールバックfnに渡すことを助けません。 –

答えて

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