Пустой responseText от XMLHttpRequest

Я записал XMLHttpRequest, который хорошо работает, но возвращает пустой responseText.

JavaScript следующие:

  var anUrl = "http://api.xxx.com/rates/csv/rates.txt";
  var myRequest = new XMLHttpRequest();

  callAjax(anUrl);

  function callAjax(url) {
     myRequest.open("GET", url, true);
     myRequest.onreadystatechange = responseAjax;
                 myRequest.setRequestHeader("Cache-Control", "no-cache");
     myRequest.send(null);
  }

  function responseAjax() {
     if(myRequest.readyState == 4) {
        if(myRequest.status == 200) {
            result = myRequest.responseText;
            alert(result);
            alert("we made it");
        } else {
            alert( " An error has occurred: " + myRequest.statusText);
        }
     }
  }

Код хорошо работает. Я могу идти через, и я получаю readyState == 4 и состояние == 200, но responseText всегда является пробелом.

Я получаю ошибку журнала (в отладке Safari) Ошибочной диспетчеризации: getProperties, на который я, может казаться, не нахожу ссылку.

Я выполнил код в Safari и Firefox и локально и на удаленном сервере.

URL при помещении в браузер возвратит строку и даст код статуса 200.

Я написал подобный код к тому же URL в Виджете Mac, который хорошо работает, но тот же код в браузере никогда не возвращает результат.

28
задан Daniel Vassallo 21 December 2009 в 18:34
поделиться

3 ответа

Является ли http://api.xxx.com/ частью вашего домена? В противном случае вы заблокированы политикой одного и того же происхождения .

Вы можете проверить следующую публикацию Stack Overflow, чтобы узнать о нескольких возможных обходных решениях:

26
ответ дан 28 November 2019 в 03:24
поделиться

Браузер не позволяет вам выполнять межсайтовые сценарии.

Если URL-адрес находится за пределами вашего домена, вам необходимо сделать это на стороне сервера или переместить его в свой домен.

5
ответ дан 28 November 2019 в 03:24
поделиться

ПРОБЛЕМА РЕШЕНА

В моем случае проблема заключалась в том, что я выполняю вызов ajax (с помощью $ .ajax, $ .get или $.getJSON из jQuery) с полным путем в параметре url:

url: " http://mydomain.com/site/cgi-bin/serverApp.php "

​​Но правильный способ - передать значение url как:

url: "site / cgi-bin / serverApp.php"

Некоторые браузеры не конфликтуют и не делают различий между тем или иным текстом, но в Firefox 3.6 для Mac OS используйте этот полный путь как « межсайтовый скриптинг » ... другое дело, в том же браузере есть различие между:

http: //mydomain.com/site/index.html

и поместите

http://www.mydomain.com/site/index.html

На самом деле это правильная точка зрения, но большинство реализаций делают никаких различий, поэтому решение заключалось в том, чтобы удалить весь текст, указывающий полный путь к сценарию, в методах, выполняющих запрос ajax И .... удалить все Тег BASE в файле index.html

base href = "http://mydomain.com/" <--- плохая идея, удалите его!

Если вы не удалите его, эта версия браузера для этой системы может принять ваш запрос ajax, как если бы это был межсайтовый запрос!

У меня такая же проблема, но только на компьютере Mac OS. Проблема в том, что Firefox обрабатывает ответ ajax как «межсайтовый» вызов, на любом другом компьютере / браузере он работает нормально. Я не нашел никакой помощи по этому поводу (я думаю, что это проблема реализации firefox), но я собираюсь доказать следующий код на стороне сервера:

 header ('Content-type: application / json') ; 
 

, чтобы браузер получал данные как "данные json" ...

12
ответ дан 28 November 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: