2013-07-23 8 views
5

Ich habe so etwas wie die folgenden:

$(".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); 
}; 

Die oben funktioniert nicht, dass ich nichts in den Protokollen erhalten, nachdem die Ajax-Anforderung verarbeitet wird, und ich weiß, es hat etwas zu tun, wie ich die Argumente in RemoveItemResponse adressiere. Ich muss die zurückgegebenen Daten aus dem Ajax-Post verwenden, gebe aber auch die ID ein, die ich in der Klick-Funktion abgerufen habe.

+0

Wo liegt 'removeItem' definiert? – marteljn

+0

Sie haben uns alles gezeigt, aber removeItem, könnten Sie das tun? – Jonast92

+0

Ich glaube nicht, dass 'removeItem' relevant ist. Zu wissen, wie es definiert ist, wird nicht helfen, wenn man 'id' an den .then-Callback-fn weitergibt. –

Antwort

9

removeItemResponse(id) führt die Funktion sofort aus, und Sie geben das Ergebnis des ersten nicht zurück. Versuchen Sie stattdessen:

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

done() funktioniert auch hier:

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

Sie können Ausfälle vereinfachen und zu handhaben wie so:

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

Danke, das hat geholfen. – Gregg

2

Sie missbrauchen, wenn/dann, sie don‘ t hier bewerben. Verwenden Sie einfach .done auf das Versprechen von removeItem zurückgegeben. Es wird das Ergebnis des AJAX-Request übergeben werden (vorausgesetzt, es ist das Versprechen von einem $.ajax Aufruf oder dergleichen zurück Rückkehr), und dann können Sie das Ergebnis und die ID auf Ihre Handhabung Funktion übergeben:

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

Ich möchte eine separate Funktion, um mit Statusantwort von 200 umzugehen, und es arbeitet in dieser Hinsicht. Wie missbrauche ich es? – Gregg

+0

wenn/dann einen bestimmten Zweck haben, und das ist es nicht. Der Code, den Sie gepostet haben, kann mit einem einzigen ".done" ausgeführt werden. – meagar

+0

Danke, das macht Sinn. – Gregg