Tôi cần có nhiều trang bằng AJAX và đặt chúng vào một mảng, trong đó vị trí đã cho của chúng trong mảng bằng i
của vòng lặp for (đó là một chức năng giống như bộ nhớ đệm cho các trang blog, và phạm vi của vòng lặp for là hoàn toàn biến). Tôi đang làm một cái gì đó tương tự như sau:Gọi AJAX cho vòng lặp sẽ không trả về giá trị để sửa các vị trí mảng
var bongo = new Array();
for (i = 0; i < 10; i++) {
jQuery.ajax({ type: "GET", url: 'http://localhost', data: queryString, success: function(request) { bongo[i] = request } })
}
Vấn đề là, rằng trừ khi tôi thêm async: false
với các tùy chọn .ajax (mà sẽ làm cho nó ... SJAX?), Gây ra các yêu cầu cơ bản tạm dừng trình duyệt, chống lại những gì tôi đang cố gắng thực hiện, i trong cuộc gọi lại thành công sẽ luôn kết thúc là 11, trong khi tôi tất nhiên muốn nó đổ dữ liệu được trả về vào mỗi khe của mảng từ 0 đến 10.
Tôi đã thử thay thế đường dây bằng cách này:
bongo[i] = jQuery.ajax({ type: "GET", url: 'http://localhost', data: queryString }).responseText
Nhưng điều đó không có gì khác biệt.
Nó hoạt động như một sự quyến rũ. Nhưng tôi đã không có được những gì cuối cùng (i), ai đó có thể giải thích điều đó? –
giá trị của bên ngoài i được chuyển vào chức năng ẩn danh tự thực hiện gói; vị trí của giá trị duy nhất này được ghi lại bằng cách gọi lại không đồng bộ. Theo cách này, mỗi async nhận giá trị riêng của nó, được xác định tại thời điểm hàm tự thực hiện được gọi. Đó là điểm đóng cửa !! ;) – Plastic