2013-07-23 43 views
5

Tôi có một cái gì đó như sau:

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

ở trên không hoạt động trong đó tôi nhận được gì trong các bản ghi sau khi yêu cầu ajax được xử lý và tôi biết nó có cái gì để làm với cách tôi đang giải quyết các đối số trong removeItemResponse. Tôi cần phải sử dụng dữ liệu trả về từ bài đăng ajax nhưng cũng chuyển vào id mà tôi đã truy xuất trong hàm nhấp chuột.

+0

ở đâu 'removeItem' được xác định? – marteljn

+0

Bạn đã cho chúng tôi thấy mọi thứ trừ removeItem, bạn có thể làm điều đó không? – Jonast92

+0

Tôi không nghĩ rằng 'removeItem' là có liên quan. Biết được nó được định nghĩa như thế nào sẽ không giúp bạn chuyển 'id' đến fn .then callback. –

Trả lời

9

removeItemResponse(id) đang thực hiện chức năng ngay lập tức và bạn không chuyển kết quả của lần hoãn đầu tiên. Hãy thử điều này thay vì:

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

done() cũng làm việc ở đây:

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

Bạn có thể đơn giản hóa và xử lý thất bại như vậy:

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

Cảm ơn, điều đó đã giúp ích. – Gregg

2

Bạn đang lạm dụng khi/sau đó, họ không' t áp dụng ở đây. Chỉ cần sử dụng .done theo lời hứa được trả về từ removeItem. Nó sẽ được thông qua kết quả của yêu cầu AJAX (giả sử nó trả lại lời hứa trả về bởi một invocation $.ajax hoặc tương tự), và sau đó bạn có thể vượt qua mà kết quả và id vào chức năng xử lý của bạn:

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

Tôi muốn có một chức năng riêng biệt để đối phó với phản hồi trạng thái không 200, và nó đang làm việc trong lĩnh vực đó. Làm thế nào tôi "lạm dụng" nó? – Gregg

+0

khi/sau đó có một mục đích cụ thể, và điều này không phải là nó. Mã bạn đã đăng có thể được thực hiện bằng một '.done' duy nhất. – meagar

+0

Cảm ơn, điều đó có ý nghĩa. – Gregg

Các vấn đề liên quan