2009-05-22 25 views
21

Tôi đang sử dụng jQuery để thử và truy xuất nhiều phần dữ liệu cùng một lúc. Nền tảng của yêu cầu là các bit dữ liệu khác nhau có các khoảng thời gian khác nhau để có sẵn, vì vậy tôi muốn hiển thị từng phần khi nó được trả về.jQuery: Thực hiện các yêu cầu ajax đồng thời, có thể không?

Vấn đề là các yêu cầu dường như 'xếp hàng'; yêu cầu tiếp theo không đi cho đến khi yêu cầu trước đó trở lại. Sau khi đọc rộng rãi, có vẻ như tùy chọn 'async: false' có thể là những gì tôi theo sau, nhưng điều này dường như không tạo ra sự khác biệt nào.

Từ gỡ rối TCP/IP, tôi có thể thấy trình duyệt không khởi tạo nhiều kết nối; nó sử dụng cùng một kết nối khi yêu cầu trước đó đã trả về.

Tôi đã nhìn thấy nhiều trang web trong thời gian của tôi tải dữ liệu qua ajax cùng một lúc, vì vậy hiển nhiên là có thể, nhưng tôi đang rách tóc ra để cố gắng làm việc này.

Đây là mã của tôi:

$.ajax({ 
    type: "GET", 
    async: false, 
    url: "foo1.php" 
    }); 
$.ajax({ 
    type: "GET", 
    async: false, 
    url: "foo2.php" 
    }); 
$.ajax({ 
    type: "GET", 
    async: false, 
    url: "foo3.php" 
    }); 
+4

Tại sao bạn không xem tài liệu? Bạn nên xem xét ý nghĩa của mọi tùy chọn bạn sử dụng. 'async: false' là _opposite_ của những gì bạn mô tả. –

Trả lời

16

Bạn muốn đồng bộ (đó là mặc định). Trình duyệt giới hạn bạn thành hai yêu cầu tại bất kỳ thời điểm nào. Đây là một phần của đặc tả HTTP. (HTTP 1.1 specification, section 8.1.4)

Đưa các yêu cầu vào hàng đợi là lựa chọn tốt nhất của bạn.

Tôi nên lưu ý rằng điều này có thể bị ghi đè trong Firefox và có thể một số trình duyệt khác. (nhưng nó không phải là tiêu chuẩn, nó không giúp bạn nhiều)

+18

Cảm ơn. Bạn đã khiến tôi ngừng tìm kiếm nơi không bao giờ có vấn đề. Hóa ra điều này liên quan đến PHP và cách nó xử lý tuần tự các yêu cầu sử dụng cùng một biến phiên do khóa phiên (tại sao địa ngục không khóa viết, thay vì trong toàn bộ việc thực hiện có vẻ điên rồ). Dù sao, một 'session_write_close()' rất đơn giản đã sửa mọi thứ. Chúc mừng. –

+0

Đó là tốt để biết anyway. Bạn có thể đăng một tham chiếu cho điều đó không? – cgp

+3

@Monty Nice job chỉ ra vấn đề PHP và session_write_close() - đã làm việc cho tôi - cảm ơn bạn! – JoshuaDavid

3

Trình duyệt giới hạn hai yêu cầu đồng thời. Bạn có thể muốn sử dụng trình quản lý hàng đợi, như sau: http://www.protofunc.com/scripts/jquery/ajaxManager/

+2

Hành vi của trình duyệt là tốt, đó là PHP tại 'lỗi'. –

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