2012-04-07 28 views
9

Tôi bị mất. Làm thế nào tôi có thể vượt qua một biến vòng lặp cho một cuộc gọi AJAX .done()?

for (var i in obj) { 
    $.ajax(/script/).done(function(data){ console.log(data); }); 
} 

Rõ ràng, nếu tôi được làm console.log(i+' '+data)i sẽ trả lại chìa khóa cuối cùng trong đối tượng obj trên mỗi iteration duy nhất. Tài liệu không thành công.

+0

Tôi tìm tôi có thể sử dụng 'success', nhưng như tôi hiểu rằng bị phản đối ngay bây giờ. – philtune

Trả lời

9

Bạn có thể sử dụng một đóng cửa (thông qua một chức năng thực hiện tự) để nắm bắt giá trị của i cho mỗi lời gọi của vòng lặp như thế này:

for (var i in obj) { 
    (function(index) { 
     // you can use the variable "index" here instead of i 
     $.ajax(/script/).done(function(data){ console.log(data); }); 
    })(i); 
} 
+0

Đóng cửa là một khái niệm mà tôi luôn luôn có một thời gian khó hiểu đầy đủ. Cảm ơn @ jfriend00, tôi sẽ thử điều đó! – philtune

+0

Yep, đã hoạt động. Tôi thậm chí có thể làm 'obj [index]'. Cảm ơn một lần nữa! – philtune

5

Bạn chỉ có thể tạo ra một lĩnh vực tùy chỉnh trong đối tượng mà bạn gửi đến $ .ajax(), và nó sẽ là một trường trong "this" khi lời gọi lại lời hứa được thực hiện.

Ví dụ:

$.ajax( { url: " https://localhost/whatever.php ", method: "POST", data: JSON.stringify(object), custom: i // creating a custom field named "custom" }).done(function(data, textStatus, jqXHR) { var index = this.custom; });

+0

Sau 5 năm, tôi đã từ lâu quên những gì thậm chí còn nhắc câu hỏi này. ;) – philtune

+0

Tôi cần biết cách thực hiện việc này cho một dự án gần đây. Vì vậy, khi tôi tìm ra nó, tôi cũng cố chuyển tiếp thông tin cho những người khác nói rằng họ muốn nó ... –

+0

Điều này tốt hơn so với điểm thực thi không đồng bộ jquery ajax, nó cung cấp rõ ràng mục đích/đối tượng dự định khi gọi lại thực hiện sau này trong thời gian. –

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