Подтвердить что ты не робот

Пустой ответText из 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 Widget, который работает нормально, но тот же код в браузере никогда не возвращает результат.

4b9b3361

Ответ 2

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

В моем случае проблема заключалась в том, что я делаю вызов 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

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

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

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

  

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

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

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

  

Ответ 3

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

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

Ответ 4

Это может быть не лучший способ сделать это. Но это как-то сработало для меня, поэтому я собираюсь работать с ним.

В моей php-функции, которая возвращает данные, одна строка перед линией возврата, я добавляю оператор эха, эхо-данные, которые я хочу отправить.

Теперь уверен, почему это сработало, но так оно и было.

Ответ 5

У вас была подобная проблема. Нам нужно было найти решение document.domain, найденное здесь:

Способы обхода политики одного и того же происхождения

Нам также необходимо было изменить разламы на стороне веб-службы. Используется заголовок "Access-Control-Allow-Origin", найденный здесь:

https://developer.mozilla.org/En/HTTP_access_control