2015-01-22 18 views
6

Tôi đang cố gắng kết nối với máy chủ bằng cách sử dụng đối tượng XMLHttpRequest để đăng dữ liệu vào các thời điểm khác nhau. Tôi tạo ra một đối tượng và "kết nối" đến máy chủ như vậy:Đối tượng XMLHttpRequest có đóng sau khi nhận được phản hồi không?

var xhr = new XMLHttpRequest(); 
xhr.open("post", location, true); 
xhr.send(); //Is this send call needed to open the connection? 

Và tại một điểm sau này trong thời gian, tôi gọi một cái gì đó như thế này:

xhr.send("Something to send"); 

Tuy nhiên, nhìn vào các nhà phát triển giao diện điều khiển, dường như chỉ có yêu cầu ban đầu đã được thực hiện (và đã trả lời thành công). Yêu cầu thứ hai dường như không gửi. Tôi đang cố gắng thu hẹp những gì có thể là vấn đề, vì vậy tôi nghĩ: có thể kết nối được đóng lại sau khi nhận được phản hồi; Tại sao nó sẽ được mở? Vì vậy, câu hỏi của tôi: Là kết nối đối tượng XMLHttpRequest đóng lại một khi nó nhận được một phản ứng? Nếu vậy, cách tốt nhất để mô phỏng một kết nối mở liên tục (để liên tục kết nối lại là gì?)?

+1

Bạn cần phải tạo một đối tượng yêu cầu mới cho một yêu cầu khác. Bạn không nên gọi 'send' nhiều lần trên cùng một đối tượng. – Bergi

+0

@Bergi Sẽ không thực tế hơn khi chỉ gọi lại phương thức mở trên đối tượng? Hay điều đó sẽ không hoạt động? – chRyNaN

+0

Tôi không thấy điều đó sẽ "thực tế hơn". Bạn nghĩ gì bạn đạt được bằng cách [tái sử dụng đối tượng] (http://stackoverflow.com/q/11079543/1048572)? IIRC, một số trình duyệt cũ hơn có một vài lỗi với điều đó. – Bergi

Trả lời

4

Có, nếu bạn chưa lừa máy chủ để giữ cho máy chủ hoạt động, máy chủ sẽ bị đóng sau khi phản hồi được gửi.

Có thể bạn muốn tìm các ổ cắm web. Nhưng nếu bạn không muốn chơi với chúng, chỉ cần tạo một HttpRequest mới cho mỗi "yêu cầu" của bạn.

Giao tiếp cơ bản với yêu cầu HTTP: 1 -> 1 câu trả lời -> đã đóng!

Chỉnh sửa: Hãy nhớ rằng các ổ cắm web là một tính năng mới từ HTML5 để nó không hoạt động cho mọi trình duyệt và nếu chúng hoạt động đối với một số trình duyệt, chúng có thể không được triển khai hoàn toàn.

+0

Có, tôi biết về các ổ cắm web. Nhưng quay trở lại XMLHttpRequest, tôi không thể chỉ sử dụng lại cùng một đối tượng chỉ bằng cách gọi mở lại trên đối tượng đó, hay nó sẽ không hoạt động? – chRyNaN

+0

Không, bạn phải tạo lại một 'XLMHttpRequest' cho mỗi" yêu cầu "mà bạn muốn làm. –

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