2012-02-29 32 views

Trả lời

4

Tôi không nghĩ rằng trình duyệt có thời gian chờ cho AJAX, chỉ có các yêu cầu đồng bộ hoặc không đồng bộ; đồng bộ - đầu tiên đóng băng thực thi JavaScript cho đến khi yêu cầu trả về, không đồng bộ - không đóng băng thực thi JavaScript, nó chỉ yêu cầu ra khỏi luồng thực thi và nếu bạn có hàm gọi lại, hàm sẽ thực thi hàm song song với hoạt động tập lệnh (tương tự như một chuỗi)

**sync flow:** 

running JS script 
    | 
    ajax 
(wait for response) 
    | 
execute callback 
    | 
running JS script 




**async flow:** 

running JS script 
    | 
    ajax -------------------- 
    |      | 
running JS script  execute callback 
21

Theo thông số kỹ thuật, giá trị thời gian chờ mặc định bằng 0, có nghĩa là không có thời gian chờ. Tuy nhiên, bạn có thể đặt giá trị thời gian chờ trên thuộc tính XHR.timeout; giá trị bằng mili giây.

Nguồn:

http://www.w3.org/TR/2011/WD-XMLHttpRequest2-20110816/#the-timeout-attribute http://msdn.microsoft.com/en-us/library/cc304105(v=vs.85).aspx

+6

Nhưng có thời gian chờ cơ bản không được bao gồm trong thông số kỹ thuật. Từ liên kết thứ hai: 'Nếu bạn đặt giá trị time-out XMLHttpRequest lớn hơn giá trị hết thời gian của ngăn xếp mạng, ngăn xếp mạng sẽ hết thời gian đầu tiên và sự kiện ontimeout sẽ không được nâng lên.' – djjeck

1

trình duyệt không có một giá trị thời gian chờ, hành vi phụ thuộc vào chrome trình duyệt có giá trị thời gian chờ 5 phút và sau 5 phút nó gửi lại gọi ajax

+0

Hết thời gian chờ sau 10 giây ..? – ppumkin

0

tôi đã làm một lượng thử nghiệm khiêm tốn. Để kiểm tra tôi đã tải trang web của mình, hãy dừng máy chủ cục bộ và sau đó thử yêu cầu AJAX. Tôi đặt timeout thành thứ gì đó thấp như 1000ms cho đến khi tôi có thể đảm bảo rằng tôi có mã tối thiểu (bạn phải đặt xhr.timeout sau opentrướcsend).

Khi tôi đã đạt được mục tiêu ban đầu của mình là xác định khoảng thời gian thích hợp để cho phép tuy nhiên tôi đã rất ngạc nhiên khi các trình duyệt timeout hoàn toàn bị bỏ qua. Mục tiêu của tôi được cải cách để cố gắng xác định thời gian chờ tối đa có thể trước khi xử lý lỗi không còn khả thi.Điều đó có nghĩa là đã qua các khoảng thời gian khá ngắn của tập lệnh xử lý thời gian chờ sẽ không hoạt động ở tất cả. Những gì tôi thấy là khá thảm hại.

  • Chrome 60: 995ms, 996ms sẽ phát hiện lỗi ác trong bảng điều khiển.
  • Firefox 52 ESR: ~ 3000ms, vị trí của chuột hoặc sự cố khác có thể không gây ra phản hồi xung quanh hoặc chỉ dưới ba giây.

Vậy ...

xhr.open(method,url,true); 
xhr.timeout = 995;//REALLY short 
xhr.send(null); 
xhr.ontimeout = function() 
{ 
//Code will only execute if at or below *effective* timeouts list above. 
//Good spot to make a second attempt. 
} 

Vì vậy, nếu timeout của bạn được đặt cao hơn 995ms Chrome sẽ bỏ qua mã của bạn và nôn trên console trống sạch đẹp của bạn mà bạn làm việc chăm chỉ để giữ sạch. Firefox không tốt hơn nhiều và có những yêu cầu không đáng tin cậy mà chỉ hết thời gian chờ vượt quá bất kỳ sự kiên nhẫn nào tôi có và khi làm như vậy hãy bỏ qua trình xử lý ontimeout.

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