Відповіді:
Інший випадок:
Можливо отримати код статусу, 0
якщо ви надіслали дзвінок AJAX, а оновлення браузера було запущено до отримання відповіді на AJAX . Виклик AJAX буде відмінено, і ви отримаєте цей статус.
<form onsubmit="return false;">
e.preventDefault();
На мій досвід, ви побачите статус 0, коли:
Тут же проблема при використанні <button onclick="">submit</button>
. Потім вирішується за допомогою<input type="button" onclick="">
Код статусу 0 означає, що запитуваний URL недоступний. Змінивши http: // щось / щось на https: // щось / щось працювало на мене. IE видає помилку, кажучи "дозволу відмовлено", коли код статусу 0, інші браузери не роблять.
Ця стаття мені допомогла. Я надсилав форму через AJAX і забув використовувати return false
(після мого запиту на ajax), що призвело до подання класичної форми, але, як не дивно, вона не була заповнена.
<form onsubmit="return false;">
зробив трюк.
Оскільки це відображається, коли ви перебуваєте в google ajax status 0, я хотів залишити підказку, яка просто зайняла у мене витрачені години ... Я використовував ajax для виклику служби PHP, яка трапилася в REST_Controller Філа для Codeigniter (не впевнений, чи це що-небудь робити з цим чи ні) і продовжував отримувати статус 0, Readystate 0, і це мене заганяло. Я налагоджував це і помічав, коли я відлуню і повернуться замість виходу з повідомлення, я отримав би успіх. Нарешті я відключив налагодження і спробував, і це спрацювало. Здається, налагоджувач xDebug з PHP якимось чином змінював відповідь. Якщо ви використовуєте відладчик PHP, спробуйте вимкнути його, щоб побачити, чи це допомагає.
Я знайшов інший випадок, коли jquery дає код статусу 0 - якщо з якихось причин XMLHttpRequest не визначено, ви отримаєте цю помилку.
Очевидно, що це зазвичай не трапляється в Інтернеті, але помилка в нічній версії Firefox призвела до того, що це з'явилося у додатку, про який я писав. :)
jQuery.ajax()
об'єктом XHR. Запит навіть не був створений під час виклику AJAX, все-таки отримання f.open не є функцією та кодом статусу 0. Викликано: Я повертався з $.ajaxSettings.xhr
об'єкта $.ajaxSetup({xhr})
, повертаючись new window.XMLHttpRequest();
замість цього, вирішив проблему
У мене була така ж проблема, і вона була пов’язана з блоком XSS (міжсайтовий сценарій) браузером. Мені вдалося змусити його працювати за допомогою сервера.
Погляньте на сторінку : http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0
"Випадкове" подання форми було саме тією проблемою, яку я мав. Я щойно видалив мітки ФОРМУ і це, здається, вирішило проблему. Дякую всім!
У нас була подібна проблема - код статусу 0 при виклику jquery ajax - і нам знадобився цілий день, щоб діагностувати її. Оскільки про цю причину ніхто ще не згадував, я думав, що поділюсь.
У нашому випадку проблема полягала в збої HTTP-сервера. Якась помилка в PHP видувала Apache, тож на клієнтському кінці це виглядало так:
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:~$
де test.php містив код збоїв. Жодних даних, повернутих із сервера (навіть заголовки) => виклик ajax не було перервано зі статусом 0.
У моєму випадку це було викликано запуском мого сервера django під, http://127.0.0.1:8000/
але надсиланням дзвінка ajax на http://localhost:8000/
. Незважаючи на те, що ви очікуєте, що вони віднесуть до однієї адреси, вони не переконайтеся, що ви не надсилаєте свої запити до localhost.
У нашому випадку посилання на сторінку було змінено з https на http . Незважаючи на те, що користувачі ввійшли в систему, їм не вдалося завантажити AJAX.
Для мене цю проблему викликала компанія-хостинг (Godaddy), яка розглядала операції POST, які мали суттєві дані відгуку (що-небудь більше десятків кілобайт) як якусь загрозу безпеці. Якщо більше 6 з них відбулося за одну хвилину, хост відмовився виконувати код PHP, який відповів на запит POST протягом наступної хвилини. Я не зовсім впевнений у тому, що хост робив замість цього, але з tcpdump я побачив пакет скидання TCP, який надходить як відповідь на POST-запит від браузера. Це призвело до того, що код статусу http, що повертається в об'єкті jqXHR, дорівнює 0.
Зміна операцій з POST на GET виправила проблему. Не ясно, чому Godaddy нав'язує цю межу, але змінити код було простіше, ніж змінити хост.
Я думаю, я знаю, що може спричинити цю помилку.
У Google Chrome є вбудована функція для запобігання ddos-атак для розширень Google Chrome.
Коли запити ajax постійно повертають 500+ помилок статусу, він починає придушувати запити.
Отже, можна отримати статус 0 за наступними запитами.
У спробі виграти приз з найбільш глупої причини описаної проблеми.
Забувши дзвонити
xmlhttp.send(); //yes, you need this pivotal line!
Так, я все одно отримував нульові повернення статусу від "відкритого" дзвінка.
У моєму випадку я отримував це, але тільки на Safari Mobile. Проблема полягає в тому, що я використовував повну URL-адресу ( http://example.com/wever.php ) замість відносної (незалежно.php). Це не має сенсу, але це не може бути проблемою XSS, оскільки мій сайт розміщено на веб-сайті http://example.com . Я думаю, що Safari розглядає частину http і автоматично позначає її як незахищений запит, не перевіряючи решту URL-адреси.
Під час усунення несправностей я виявив, що цей AJAX xmlhttpRequest.status == 0 може означати, що дзвінок клієнта ще НЕ дойшов до сервера, але не вдався через проблему на стороні клієнта. Якщо відповідь була від сервера, то статус повинен бути або тим 1xx / 2xx / 3xx / 4xx / 5xx HTTP-кодом відповіді. Відтепер усунення несправностей має зосереджуватися на проблемі КЛІЄНТА, а це може бути відключення мережевої мережі Інтернет або одне з описаних вище @Langdon.
Під час подання запиту дотримуйтесь консолі веб-переглядача, якщо ви бачите "Політика того самого джерела забороняє читати віддалений ресурс на http ajax ..... причина: заголовок cors" доступ-контроль-дозвіл-походження "відсутній", тоді вам потрібно додайте у заголовок відповіді "Access-Control-Allow-Origin". екза: у Java ви можете встановити це як response.setHeader ("Access-Control-Allow-Origin", "*"), де відповідь - HttpServletResponse.