Ответ не получен с использованием XmlHttpRequest - PullRequest
1 голос
/ 27 февраля 2011

Я пытаюсь написать небольшой скрипт, который может отправить запрос и скачать ответ json.

var xmlhttp = false;

    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }

      xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4)
        {
         // I tried checking for status but that is always coming 0
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText+"a";
        }
      }*/
      var url = 'http://exampleurl.com/api?input=a@b.com';
    xmlhttp.open('GET',url,true);
    xmlhttp.send(null);

Теперь, если я заменю URL текстовым файлом, он будет работать нормально. Однако мой сервер отвечает в кодировке JSON. Также, если я захожу на URL в моем браузере, он показывает мне желаемый результат.

Однако, когда я запрашиваю его с помощью XmlHttpRequest, он всегда дает мне статус 0 и имеет нулевой ответ (ничего для декодирования).

Ответы [ 2 ]

1 голос
/ 27 февраля 2011

Вы пробовали URL, кодирующий параметры вашего запроса? Похоже, вы отправляете через специальные символы.

Как упомянуто kjy112, существуют ограничения на выполнение запросов на стороне клиента к другим доменам, даже поддоменам - та же политика происхождения.

Обновление: Inder, см. http://en.wikipedia.org/wiki/Same_origin_policy, это механизм безопасности, который предотвращает то, что вы пытаетесь сделать.

Вот как это можно решить: Пусть ваш сервер сделает звонок от имени вашего клиента. Под этим я подразумеваю, что примите вызов, который вы собираетесь сделать из браузера (через AJAX), и сделайте его веб-службой на сервере. Затем отправьте вызов AJAX на ваш сервер, который затем сделает вызов и вернет ответ. Итак, вы используете свой сервер в качестве посредника.

Или

Если это публичный API, они, вероятно, настроены для JSONP (http://ajaxian.com/archives/jsonp-json-with-padding)

0 голосов
/ 27 февраля 2011

Я обычно проверяю xmlhttp.status после проверки readyState (200 - это то, что вы хотите)

Вы пробовали проверить xmlhttp.statusText, чтобы увидеть, содержит ли оно что-нибудь интересное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...