Ответ 1
Является ли http://api.xxx.com/
частью вашего домена? Если нет, вы заблокированы той же политикой происхождения.
Возможно, вы захотите проверить следующий пост для нескольких возможных обходных путей:
Я написал 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, который работает нормально, но тот же код в браузере никогда не возвращает результат.
Является ли http://api.xxx.com/
частью вашего домена? Если нет, вы заблокированы той же политикой происхождения.
Возможно, вы захотите проверить следующий пост для нескольких возможных обходных путей:
РЕШЕНАЯ ПРОБЛЕМА
В моем случае проблема заключалась в том, что я делаю вызов 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
Фактически это правильный вид точки, но большинство реализаций не делают различий, поэтому решение заключалось в том, чтобы удалить весь текст, который указывает полный путь к script в методах, выполняющих запрос ajax И.... удалите тег BASE в файле index.html
base href= "http://mydomain.com/" < --- плохая идея, удалите ее!
Если вы не удалите его, эта версия браузера для этой системы может принять ваш запрос ajax, как если бы это был запрос на кросс-сайт!
У меня такая же проблема, но только на машине Mac OS. Проблема в том, что Firefox рассматривает ответ ajax как вызов "кросс-сайта", в любом другом компьютере/браузере он отлично работает. Я не нашел никакой помощи об этом (я думаю, что это проблема реализации firefox), но я собираюсь доказать следующий код на стороне сервера:
header('Content-type: application/json');
чтобы браузер получал данные как "json data"...
Браузер не позволяет вам выполнять межсайтовый скриптинг.
Если URL-адрес находится за пределами вашего домена, вам необходимо сделать это на стороне сервера или переместить его в свой домен.
Это может быть не лучший способ сделать это. Но это как-то сработало для меня, поэтому я собираюсь работать с ним.
В моей php-функции, которая возвращает данные, одна строка перед линией возврата, я добавляю оператор эха, эхо-данные, которые я хочу отправить.
Теперь уверен, почему это сработало, но так оно и было.
У вас была подобная проблема. Нам нужно было найти решение document.domain, найденное здесь:
Способы обхода политики одного и того же происхождения
Нам также необходимо было изменить разламы на стороне веб-службы. Используется заголовок "Access-Control-Allow-Origin", найденный здесь: