Câu trả lời:
Một trường hợp khác:
Có thể nhận được mã trạng thái 0
nếu bạn đã gửi một cuộc gọi AJAX và việc làm mới trình duyệt đã được kích hoạt trước khi nhận được phản hồi AJAX . Cuộc gọi AJAX sẽ bị hủy và bạn sẽ nhận được trạng thái này.
<form onsubmit="return false;">
e.preventDefault();
Theo kinh nghiệm của tôi, bạn sẽ thấy trạng thái 0 khi:
Vấn đề tương tự ở đây khi sử dụng <button onclick="">submit</button>
. Sau đó giải quyết bằng cách sử dụng<input type="button" onclick="">
Mã trạng thái 0 có nghĩa là không thể truy cập url được yêu cầu. Bằng cách thay đổi http: // cái gì đó / cái gì đó để https: // cái gì đó / cái gì đó làm việc cho tôi. IE đưa ra lỗi "quyền bị từ chối" khi mã trạng thái là 0, các trình duyệt khác thì không.
Bài viết này đã giúp tôi. Tôi đã gửi biểu mẫu qua AJAX và quên sử dụng return false
(sau yêu cầu ajax của tôi) dẫn đến việc gửi biểu mẫu cổ điển nhưng kỳ lạ là nó không được hoàn thành.
<form onsubmit="return false;">
đã lừa
Bởi vì điều này xuất hiện khi bạn google trạng thái ajax 0 Tôi muốn để lại một số mẹo khiến tôi mất nhiều giờ lãng phí ... Tôi đã sử dụng ajax để gọi một dịch vụ PHP tình cờ là REST_Contoder cho Codeigniter của Phil (không chắc là nó có bất cứ điều gì để làm với nó hay không) và tiếp tục nhận trạng thái 0, đọc lại 0 và nó đang khiến tôi phát điên. Tôi đã gỡ lỗi nó và nhận thấy khi nào tôi sẽ lặp lại và quay lại thay vì thoát khỏi thông điệp tôi sẽ thành công. Cuối cùng tôi tắt gỡ lỗi và thử và nó hoạt động. Có vẻ như trình gỡ lỗi xDebug với PHP bằng cách nào đó đã sửa đổi phản hồi. Nếu bạn sử dụng trình gỡ lỗi PHP, hãy thử tắt nó để xem có giúp được không.
Tôi đã tìm thấy một trường hợp khác trong đó jquery cung cấp cho bạn mã trạng thái 0 - nếu vì lý do nào đó XMLHttpRequest không được xác định, bạn sẽ gặp lỗi này.
Rõ ràng điều này sẽ không thường xảy ra trên web, nhưng một lỗi trong bản dựng firefox hàng đêm đã khiến điều này xuất hiện trong một tiện ích bổ sung mà tôi đang viết. :)
jQuery.ajax()
đối tượng XHR. Yêu cầu thậm chí không được tạo trong cuộc gọi AJAX, vẫn nhận được f.open không phải là chức năng và mã trạng thái 0. Nguyên nhân là: Tôi đã trả lại $.ajaxSettings.xhr
đối tượng từ đó $.ajaxSetup({xhr})
, new window.XMLHttpRequest();
thay vào đó đã giải quyết vấn đề
Tôi đã có cùng một vấn đề, và nó có liên quan đến khối XSS (kịch bản chéo trang) bởi trình duyệt. Tôi quản lý để làm cho nó hoạt động bằng cách sử dụng một máy chủ.
Hãy xem tại: http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0
Gửi biểu mẫu "Tình cờ" chính xác là vấn đề tôi gặp phải. Tôi chỉ loại bỏ các thẻ FORM hoàn toàn và điều đó dường như để khắc phục vấn đề. Cám ơn mọi người!
Chúng tôi đã gặp vấn đề tương tự - mã trạng thái 0 trong cuộc gọi jquery ajax - và chúng tôi mất cả ngày để chẩn đoán nó. Vì chưa ai đề cập đến lý do này, tôi nghĩ tôi sẽ chia sẻ.
Trong trường hợp của chúng tôi, vấn đề là sự cố máy chủ HTTP. Một số lỗi trong PHP đã thổi vào Apache, vì vậy ở đầu máy khách, nó trông như thế này:
mirek@toccata:~$ telnet our.server.com 80
Trying 180.153.xxx.xxx...
Connected to our.server.com.
Escape character is '^]'.
GET /test.php HTTP/1.0
Host: our.server.com
Connection closed by foreign host.
mirek@toccata:~$
trong đó test.php chứa mã lỗi. Không có dữ liệu nào được trả về từ máy chủ (thậm chí không có tiêu đề) => cuộc gọi ajax bị hủy bỏ với trạng thái 0.
Trong trường hợp của tôi, đó là do chạy máy chủ django của tôi bên dưới http://127.0.0.1:8000/
nhưng gửi cuộc gọi ajax tới http://localhost:8000/
. Mặc dù bạn sẽ mong muốn chúng ánh xạ tới cùng một địa chỉ, nhưng chúng không đảm bảo rằng bạn không gửi yêu cầu của mình đến localhost.
Trong trường hợp của chúng tôi, liên kết trang đã được thay đổi từ https thành http . Mặc dù người dùng đã đăng nhập, họ đã bị ngăn tải bằng AJAX.
Đối với tôi, vấn đề là do công ty lưu trữ (Godaddy) xử lý các hoạt động POST có dữ liệu phản hồi đáng kể (bất cứ thứ gì hơn hàng chục kilobyte) là một mối đe dọa bảo mật. Nếu hơn 6 trong số này xảy ra trong một phút, máy chủ đã từ chối thực thi mã PHP đã trả lời yêu cầu POST trong phút tiếp theo. Tôi không hoàn toàn chắc chắn những gì máy chủ đã làm thay vào đó, nhưng tôi đã thấy, với tcpdump, gói thiết lập lại TCP sắp tới là phản hồi cho yêu cầu POST từ trình duyệt. Điều này khiến mã trạng thái http được trả về trong một đối tượng jqXHR là 0.
Thay đổi các hoạt động từ POST sang GET đã khắc phục sự cố. Không rõ tại sao Godaddy áp đặt giới hạn này, nhưng thay đổi mã dễ hơn thay đổi máy chủ.
Tôi nghĩ rằng tôi biết những gì có thể gây ra lỗi này.
Trong google chrome có một tính năng được xây dựng để ngăn chặn các cuộc tấn công ddos cho các tiện ích mở rộng của Google chrome.
Khi các yêu cầu ajax liên tục trả về hơn 500 lỗi trạng thái, nó bắt đầu điều tiết các yêu cầu.
Do đó có thể nhận trạng thái 0 theo các yêu cầu sau.
Trong một nỗ lực để giành giải thưởng cho lý do ngu ngốc nhất cho vấn đề được mô tả.
Quên cuộc gọi
xmlhttp.send(); //yes, you need this pivotal line!
Có, tôi vẫn nhận được trạng thái trả về số 0 từ cuộc gọi 'mở'.
Trong trường hợp của tôi, tôi đã nhận được điều này nhưng chỉ trên Safari Mobile. Vấn đề là tôi đã sử dụng URL đầy đủ ( http://example.com/whthing.php ) thay vì URL tương đối (anything.php). Điều này không có ý nghĩa gì cả, nó không thể là vấn đề XSS vì trang web của tôi được lưu trữ tại http://example.com . Tôi đoán Safari nhìn vào phần http và tự động gắn cờ nó là một yêu cầu không an toàn mà không kiểm tra phần còn lại của URL.
Trong phần khắc phục sự cố của mình, tôi thấy AJAX xmlhttpRequest.status == 0 này có thể có nghĩa là cuộc gọi của khách hàng chưa đến máy chủ, nhưng không thành công do sự cố ở phía máy khách. Nếu phản hồi là từ máy chủ, thì trạng thái phải là mã Phản hồi HTTP 1xx / 2xx / 3xx / 4xx / 5xx. Do đó, việc khắc phục sự cố sẽ tập trung vào vấn đề CLIENT và có thể là kết nối mạng internet bị hỏng hoặc một trong những vấn đề được mô tả bởi @Langdon ở trên.
Quan sát Bảng điều khiển trình duyệt trong khi thực hiện yêu cầu, nếu bạn đang thấy "Chính sách nguồn gốc tương tự không cho phép đọc tài nguyên từ xa tại http ajax ..... lý do: tiêu đề cors 'access-control-allow-origin'" thì bạn cần phải thêm "Kiểm soát truy cập-Cho phép-Xuất xứ" trong tiêu đề phản hồi. exa: trong java, bạn có thể thiết lập điều này như answer.setHeader ("Truy cập-Kiểm soát-Cho phép-Xuất xứ", "*") trong đó phản hồi là HttpServletResponse.