Невозможно получить данные с помощью XMLHttpRequest (статус 0 и responseText пуст):
xmlhttp = новый XMLHttpRequest (); xmlhttp.open («GET», «http://www.w3schools.com/XML/cd_catalog.xml», true); xmlhttp.onreadystatechange = функция () { если (xmlhttp.readyState == 4) предупреждение ("статус" + xmlhttp.status); } xmlhttp.send ();
Предупреждает «статус 0».
Такая же ситуация с запросом localhost (cd_catalog.xml сохраняется как локальный файл)
xmlhttp.open ("GET", "http: //localhost/cd_catalog.xml", true);
Но с IP-запросом localhost
xmlhttp.open ("GET", "http://127.0.0.1/cd_catalog.xml", true);
и с запросом локального файла
xmlhttp.open («ПОЛУЧИТЬ», «cd_catalog.xml», истина);
все ок (статус 200)
Что может вызвать проблему (статус = 0) с онлайн-запросом?
PS: Live HTTP Headers показывает, что все в порядке во всех 4 случаях:
HTTP / 1.1 200 ОК Длина содержимого: 4742
PS2: локальный веб-сервер Apache на VMWare (хост-ОС Win7, гостевая ОС Ubuntu, сетевой адаптер - NAT). Браузер - Firefox.
javascript
ajax
xmlhttprequest
аригаса
источник
источник
http://127.0.0.1
случайно не попала? ;)XMLHttpRequest
не может выполнять междоменные запросы. Однако есть некоторые обходные пути. Взгляните, например, на jquery.Ответы:
status равен 0, когда ваш html-файл, содержащий скрипт, открыт в браузере через файловую схему. Обязательно поместите файлы на свой сервер (apache или tomcat, что угодно), а затем откройте его по протоколу http в браузере. (т.е. http: //localhost/myfile.html ) Это решение.
источник
file://
схемы). Очевидно, вам нужно сначала разрешить загрузку локального файла, отключив CORS.Причина ваших проблем в том, что вы пытаетесь выполнить междоменный вызов, но это не удается .
Если вы занимаетесь разработкой localhost, вы можете совершать междоменные вызовы - я делаю это все время.
Для Firefox вы должны включить его в настройках конфигурации.
Затем добавьте что-то вроде этого в свой открытый код XHR:
Для IE, если я правильно помню, все, что вам нужно сделать, это включить настройку безопасности браузера в разделе «Разное → Доступ к источникам данных через домены», чтобы заставить его работать с ActiveX XHR.
IE8 и более поздние версии также добавили междоменные возможности к собственным объектам XmlHttpRequest, но я еще не играл с ними.
источник
--allow-file-access-from-files
--allow-file-access-from-files
переключателем, но вам не нужно закрывать все другие запущенные экземпляры. Точно так же, как и в случае с Chrome Incognito Mode - вы можете использовать его, не закрывая другие запущенные экземпляры.На самом деле убедитесь, что ваш тип кнопки - Button not Submit, это вызвало конфликт статуса, с которым я недавно встречался.
источник
e.preventDefault()
Если сервер отвечает на метод OPTIONS, а также на GET и POST (в зависимости от того, какой из них вы используете) с заголовком, например:
Это может работать нормально. Кажется, в FireFox 3.5 и rekonq 0.4.0. По-видимому, с этим заголовком и начальным ответом на OPTIONS сервер говорит браузеру: «Давай, позволь этому междоменному запросу пройти».
источник
XMLHttpRequest
(т.е. согласно исходному вопросу), потому что этот ресурс (по крайней мере, по состоянию на 24 апреля 2015 г.) не включает такой заголовок CORS.Учитывайте также тайм-аут запроса :
Современный браузер возвращает readyState = 4 и s tatus = 0, если до ответа сервера прошло слишком много времени.
источник
Добавьте
setRequestHeader("Access-Control-Allow-Origin","*")
к своему серверу ответ.источник
Я столкнулся с подобной проблемой. Все было в порядке, «состояние готовности» равнялось 4, а «статус» - 0. Это произошло потому, что я использовал портативный сервер Apache PHP, а мой файл, в котором я использовал объект «XMLHttpRequest», был файлом HTML. Я изменил расширение файла на php, и проблема была решена.
источник
Откройте консоль javascript . Вы увидите там сообщение об ошибке. В моем случае это был CORS.
источник
Чтобы ответить на вопрос, почему
http://127.0.0.1/cd_catalog.xml
работает, аhttp://localhost/cd_catalog.xml
нет: Firefox рассматривает 127.0.0.1 и localhost как два разных домена.источник
Чтобы понять, в чем проблема, при появлении загадочной ошибки 0 перейдите в ... | Дополнительные инструменты | Инструменты разработчика (Ctrl + Shift + I) в Chrome (на странице с ошибкой)
Прочтите красный текст в журнале, чтобы получить истинное сообщение об ошибке. Если там слишком много, щелкните правой кнопкой мыши и «Очистить консоль», затем повторите последний запрос.
Моя первая проблема заключалась в том, что я впервые передавал заголовки авторизации в свою собственную междоменную веб-службу для браузера.
У меня уже было:
Но нет:
в заголовке ответа моего веб-сервиса.
После того, как я добавил это, моя ошибка нуля исчезла с моего собственного веб-сервера, а также при запуске файла index.html локально без веб-сервера, но все еще давала ошибки в ручке кода.
Вернуться к ... | Дополнительные инструменты | Инструменты разработчика при получении ошибки в коде, и там четко объяснено: кодовое слово использует https, поэтому я не могу звонить по http, так как безопасность ниже.
Поэтому мне нужно разместить свой веб-сервис на https.
Знание, как получить истинное сообщение об ошибке - бесценно!
источник
'https://mysiteoriginsite'
была загружена по HTTPS, но запросила небезопасную конечную точку XMLHttpRequest'http://MyDestinationSite/MyService.svc'
. Этот запрос был заблокирован; контент должен обслуживаться по HTTPS.Вот еще один случай
status === 0
, связанный с загрузкой:Если вы прикрепите
'load'
обработчик событий кXHR.upload
, как предлагает MDN (прокрутите вниз до части загрузки «Мониторинг хода выполнения»), объект XHR будет иметь,status=0
а все остальные свойства будут пустыми строками. Если прикрепить'load'
обработчик непосредственно к объекту XHR, как при загрузке контента, все будет в порядке (если вы не работаете с localhost).Однако, если вы хотите получить надежные данные в своих
'progress'
обработчиках событий, вам необходимо прикрепить обработчик к самому объекту XHRXHR.upload
, а не напрямую.Я тестировал это пока только на Chrome OSX, поэтому я не уверен, насколько проблема здесь в документации MDN и сколько стоит реализация Chrome ...
источник
Алекс Робинсон уже (и первый) дает правильный ответ на этот вопрос. Но чтобы уточнить это немного подробнее ...
Вы должны добавить заголовок HTTP-ответа:
Access-Control-Allow-Origin: *
Если вы сделаете это, результат будет не просто «может сработать», но «будет работать».
NB. Вам нужно добавить заголовок HTTP- ответа, поэтому вы можете сделать это только на сервере, который вы контролируете. Невозможно напрямую получить http://w3schools.com/XML/cd_catalog.xml из исходного URL-адреса, используя
XMLHttpRequest
(согласно вопросу OP), потому что этот ресурс не поддерживает (по крайней мере, не с 24 апреля 2015 г.) включить любой такой заголовок CORS.http://en.wikipedia.org/wiki/Cross-origin_resource_sharing дает дополнительную информацию.
источник
Моя проблема, похожая на эту, была решена проверкой моего html-кода. У меня был
onclick
обработчик в моей кнопке отправки формы для метода. нравится это:onclick="sendFalconRequestWithHeaders()"
. Этот метод, в свою очередь, вызывает ajax, как и ваш, и делает то, что я хочу. Но не так, как ожидалось, мой браузер ничего не возвращал.Узнал от чьего-то тяжелого труда , я вернул false в этом обработчике и решил. Позвольте мне сказать , что до прибытия на этот пост, я потратил целый 3-дневный уик - энд и полдня в офисе , написание кода , реализующий
CORS filters
,jetty config
, другойjersey and embedded jetty
связанный материал - просто , чтобы исправить это, вращаясь все мое понимание вокруг.cross domain ajax requests
И стандартов вещи. Было смешно, как простые ошибки в javascript делают вас тупым.По правде говоря, я попробовал
signed.applets.codebase_principal_support = true
и написалisLocalHost() **if**
. может быть, этот метод должен быть реализован нами, firefox говорит, что его нет. Теперь мне нужно очистить свой код, чтобы отправить исправление git. Благодаря этому кто-то.источник
Запрос браузера «127.0.0.1/somefile.html» поступает на локальный веб-сервер без изменений, а «localhost / somefile.html» может поступать как «0: 0: 0: 0: 0: 0: 0: 1 / somefile.html. "если поддерживается IPv6. Таким образом, последний может быть обработан как переход от одного домена к другому.
источник
Алекс Робинсон и bmju предоставили ценную информацию для понимания проблем перекрестного происхождения. Я хотел добавить, что вам может потребоваться явный вызов OPTIONS в вашем клиентском коде, прежде чем делать желаемый GET / POST (например, для конечной точки службы CORS OAuth). Ваш браузер / библиотека не может автоматически обрабатывать запрос OPTIONS. Грубер, это один из возможных ответов на ваш вопрос.
источник
У меня была такая же проблема (readyState было 4, а статус 0) , затем я применил другой подход, описанный в этом руководстве: https://spring.io/guides/gs/consuming-rest-jquery/
Он вообще не использовал XMLHttpRequest , вместо этого он использовал метод jquery $ .ajax () :
и для файла public / hello.js (или вы можете вставить его напрямую в тот же HTML-код):
источник
$.ajax()
используетсяXMLHttpRequest
внутри, не так ли?Мне пришлось добавить мой текущий IP-адрес (снова) в белый список Atlas MongoDB и, таким образом, избавиться от ошибки XMLHttpRequest status 0
источник
У меня была эта проблема, потому что я использовал в
0.0.0.0
качестве своего сервера, изменил его на,localhost
и он работает.источник
Изменить: пожалуйста, прочтите комментарии Мальволио ниже, поскольку знания этого ответа устарели.
Вы не можете выполнять междоменные запросы XMLHttpRequests.
Вызов
127.0.0.1
работает, потому что ваша тестовая страница находится по адресу127.0.0.1
, и локальный тест также работает, так как, ну ... это локальный тест.Два других теста терпят неудачу, потому что JavaScript не может взаимодействовать с удаленным сервером через XMLHttpRequest.
Вместо этого вы можете рассмотреть:
надеюсь, это поможет
источник
XMLHttpRequest
s - это не только хорошая идея, они настолько распространены в наши дни, что НЕ делать их в современном веб-приложении (помимо каких-то HelloWorlds) - это что-то нелепое. Любая внешняя служба REST, которую использует ваше приложение, требует междоменного доступаXMLHttpRequest
. Вот почему был добавлен весь этот CORS-материал.