По какой-то причине при использовании AJAX (с моим дашкодразработанное приложение) браузер просто прекращает загрузку и возвращает коды состояния 0
. Почему так происходит?
Ответы:
Другой случай:
Можно получить код состояния, 0
если вы отправили вызов AJAX и обновление браузера было запущено до получения ответа AJAX . Вызов AJAX будет отменен, и вы получите этот статус.
<form onsubmit="return false;">
e.preventDefault();
По моему опыту, вы увидите статус 0, когда:
Та же проблема здесь при использовании <button onclick="">submit</button>
. Затем решается с помощью<input type="button" onclick="">
Код состояния 0 означает, что запрошенный URL недоступен. Изменив http: // something / something на https: // something / something, у меня сработало. IE выдает сообщение об ошибке «разрешение отклонено», когда код состояния равен 0, другие браузеры этого не делают.
Эта статья мне помогла. Я отправлял форму через AJAX и забыл использовать return false
(после моего запроса ajax), что привело к отправке классической формы, но, как ни странно, она не была завершена.
<form onsubmit="return false;">
сделали свое дело.
Поскольку это появляется, когда вы google ajax status 0, я хотел оставить совет, который просто занял у меня несколько часов потраченного впустую времени ... Я использовал ajax для вызова службы PHP, которая оказалась REST_Controller Фила для Codeigniter (не уверен, что это ничего общего с этим или нет) и продолжал получать статус 0, состояние готовности 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
«Случайная» отправка формы была именно той проблемой, с которой я столкнулся. Я просто полностью удалил теги FORM и, похоже, решил проблему. Спасибо всем!
У нас была аналогичная проблема - код состояния 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!
Да, я все еще получал нулевой статус при вызове open.
В моем случае я получал это, но только в Safari Mobile. Проблема в том, что я использовал полный URL ( http://example.com/whatever.php ) вместо относительного (something.php). Это не имеет никакого смысла, это не может быть проблемой XSS, потому что мой сайт размещен на http://example.com . Я предполагаю, что Safari смотрит на http-часть и автоматически помечает ее как небезопасный запрос, не проверяя остальную часть URL-адреса.
При устранении неполадок я обнаружил, что этот AJAX xmlhttpRequest.status == 0 может означать, что клиентский вызов еще НЕ достиг сервера, но не удалось из-за проблемы на стороне клиента. Если ответ был от сервера, то статус должен быть либо с кодом ответа HTTP 1xx / 2xx / 3xx / 4xx / 5xx. Отныне устранение неполадок будет сосредоточено на проблеме КЛИЕНТА, и это может быть отключение сетевого подключения к Интернету или одно из тех, что описаны @Langdon выше.
Наблюдайте за консолью браузера при выполнении запроса, если вы видите, что «Политика того же происхождения запрещает чтение удаленного ресурса по http ajax ..... причина: заголовок cors 'access-control-allow-origin' отсутствует», то вам необходимо добавьте в заголовок ответа «Access-Control-Allow-Origin». exa: в java вы можете установить это как response.setHeader ("Access-Control-Allow-Origin", "*"), где ответ HttpServletResponse.