Я записал 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, который хорошо работает, но тот же код в браузере никогда не возвращает результат.
Является ли http://api.xxx.com/
частью вашего домена? В противном случае вы заблокированы политикой одного и того же происхождения .
Вы можете проверить следующую публикацию Stack Overflow, чтобы узнать о нескольких возможных обходных решениях:
Браузер не позволяет вам выполнять межсайтовые сценарии.
Если URL-адрес находится за пределами вашего домена, вам необходимо сделать это на стороне сервера или переместить его в свой домен.
ПРОБЛЕМА РЕШЕНА
В моем случае проблема заключалась в том, что я выполняю вызов ajax (с помощью $ .ajax, $ .get или $.getJSON из jQuery) с полным путем в параметре url:
Но правильный способ - передать значение 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" ...