Tôi có một mảng giá trị (myarray
), mà tôi muốn lặp qua và chạy một yêu cầu AJAX trên mỗi lần lặp. Tôi đã đặt mỗi yêu cầu ajax bên trong một mảng (requests
), vì vậy mà tôi có thể gọi một alert
khi tất cả các yêu cầu AJAX đã hoàn thành:Thu thập kết quả AJAX theo thứ tự
Giống như vậy:
var requests = [];
for (i = 0; i < myarray.length; ++i) {
requests.push($.ajax({
url: 'anotherurl?=' + myarray[i],
dataType: "JSONP",
success: function (data) {
array_of_results.push(data);
}
}));
}
$.when.apply($, requests).done(function() {
alert('complete');
});
Tất cả các kết quả được thu thập trong array_of_results
. Tuy nhiên do các yêu cầu AJAX lấy các khoảng thời gian khác nhau để hoàn thành, mảng này không có kết quả theo thứ tự ban đầu.
Có cách nào để đặt hàng mảng này không?
Tôi hy vọng tôi có ý nghĩa. Tôi đánh giá cao điều này khá phức tạp.
cuộc gọi ajax trong vòng lặp for. Có cần thiết không? –
Tốt nhất là nên thực hiện công việc này bằng cách sử dụng Lời hứa. Chẳng hạn như ánh xạ mảng của bạn thành một mảng hứa hẹn (nói 'myPromiseArray') và sau đó gọi' Promise.all (myPromiseArray) .then (onFulFillment, onReject) 'Ở đó các cuộc gọi lại' onFulfillment' và 'onReject' sẽ được cung cấp một mảng kết quả đến từ lời hứa theo thứ tự ban đầu. – Redu
Asi hiểu cuộc gọi $ .ajax() trả về một đối tượng jqXHR vì V1.5 chứa tất cả các thuộc tính, phương thức và hành vi của giao diện Promise. Vì vậy, việc thực hiện những gì tôi đã đề cập trong bình luận trên phải là một phúc lạc. Để biết thêm thông tin về http://api.jquery.com/jquery.ajax/#jqXHR – Redu