Tôi đang sử dụng jQuery và tôi có một yêu cầu AJAX không đồng bộ. Tôi biết tôi có thể chờ đợi cho tất cả chúng được hoàn thành bằng cách sử dụng phương thức '$ .when.apply (array_of_requests)'().Làm thế nào để đợi cho đến khi các yêu cầu jQuery AJAX lồng nhau không đồng bộ đã kết thúc?
Nhưng tôi cũng có một bộ yêu cầu AJAX khác chỉ được thực hiện sau khi mỗi yêu cầu đầu tiên được hoàn tất. Tôi cũng muốn đợi họ hoàn thành, nhưng tôi không chắc chắn 100% là tôi đã tìm ra cách tốt nhất.
Dưới đây là một ví dụ đơn giản yêu cầu của tôi:
var intital_data = [1,2,3,4,5,6,7,8,9,10];
var promises = [];
var promises_inner = [];
$.each(intitial_data, function(i, n) {
var ajax_call = $.ajax({url:'http://www.domain.com/etc/'+n});
promises.push(ajax_call);
ajax_call.done(function(data) {
var ajax_call_inner = $.ajax({url:'http://www.domain.com/etc/'+data.result});
promises_inner.push(ajax_call_inner);
ajax_call_inner.done(function(data) {
// Do something with the content of data here.
});
});
});
Vì vậy, khi mỗi người trong số mười looped yêu cầu AJAX được thực hiện, tôi thực hiện một yêu cầu AJAX thứ hai dựa trên kết quả đầu tiên. Tất cả đều hoạt động tốt.
sau đó tôi có một cái gì đó như thế này, bởi vì tôi muốn đợi cho đến khi cả mười yêu cầu đầu tiên (được lưu trữ trong mảng hứa hẹn) và lô thứ hai (được lưu trữ trong promises_inner) được hoàn thành:
$.when.apply($, promises).then(
function() {
// The ten outer AJAX calls are finished now.
$.when.apply($, promises_inner).then(
function() {
// The inner AJAX calls are finished now.
}
);
}
);
Trong hàm $ đầu tiên .when.apply(). Sau đó() 'được thực hiện', yêu cầu thứ hai chưa được hoàn thành, hoặc thậm chí được thêm vào mảng promise_inner. Nhưng tôi thấy rằng thêm một lồng nhau $ .when.apply(). Sau đó() dường như làm việc - trong chức năng 'thực hiện' của nó tất cả các yêu cầu đã hoàn thành.
Nhưng tôi không chắc đây là giải pháp tốt nhất và mạnh mẽ nhất. Tôi lo lắng rằng nó chỉ hoạt động trùng hợp - rằng nó gây ra sự chậm trễ vừa đủ cho các cuộc gọi đã hoàn thành - thay vì có ý nghĩa logic.
Có giải pháp tốt hơn, vững chắc hơn không? Cảm ơn.
tôi đã nói chuyện quá sớm khi tôi nói rằng có vẻ như để làm việc. Đôi khi nó hoạt động, nhưng đôi khi, promises_inner đã không có tất cả các quảng cáo truy vấn AJAX lồng nhau suy luận về nó. Vì vậy, đôi khi bên trong $ .when xảy ra trước khi tất cả mọi thứ đã được trả lại. –