запрос ajax на другой хост - PullRequest
1 голос
/ 19 декабря 2009

У меня есть следующий javascript на моей веб-странице:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.google.com', true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    alert('resp received, status:' + xhr.status + ', responseText: ' + xhr.responseText);
  }                                                                       
};                                                                        
xhr.send(null);                                                           

это выполняется и завершается с готовым состоянием 4, состоянием 0 и пустыми responseText и responseXML. я знаю, что это на самом деле отправка запроса b / c, я попытался отправить xhr на сервер на моей машине, и сервер на самом деле отвечает. почему я не получаю ничего в тексте ответа? Есть ли что-то делать с тем фактом, что Xhr собирается на другой сервер?

когда я открываю отладчик js и набираю 'xhr', чтобы проверить объект, я получаю это:

XMLHttpRequest
СОВЕРШЕНО: 4
HEADERS_RECEIVED: 2
ЗАГРУЗКА: 3
ОТКРЫТО: 1
НЕ ОТПРАВЛЕНО: 0
abort: функция abort () {
addEventListener: function addEventListener () {
dispatchEvent: функция dispatchEvent () {
getAllResponseHeaders: function getAllResponseHeaders () {
getResponseHeader: функция getResponseHeader () {
onabort: ноль
ошибка: ноль
нагрузка: ноль
onloadstart: null
onprogress: null
onreadystatechange: function () {
open: функция open () {
overrideMimeType: функция overrideMimeType () {
readyState: 4
removeEventListener: функция removeEventListener () {
responseText: ""
responseXML: null
send: function send () {
setRequestHeader: функция setRequestHeader () {
статус: 0
statusText: ""
загрузить: XMLHttpRequestUpload
withCredentials: false

Ответы [ 4 ]

16 голосов
/ 19 декабря 2009

есть ли что-то делать с Тот факт, что Xhr собирается другой сервер?

Да, вы не можете отправлять запросы на другие серверы через AJAX. Принимая во внимание, что вы можете отправлять свои запросы со стороны сервера. Таким образом, вам нужно реализовать следующий рабочий процесс: Ваша страница -> Ваш сервер -> Сторонний сервер -> Ваш сервер -> Ваша страница, где "->" означает отправку данных.

2 голосов
/ 19 декабря 2009

Межсайтовый скриптинг - это распространенный способ внедрения кода на чужую веб-страницу. Чтобы ограничить это, большинство браузеров теперь не позволяют разработчику на стороне клиента создавать запрос JavaScript (обычно через XMLHttpRequest) к веб-страницам, расположенным в другом домене, чем исходная страница.

Вы можете обойти это, просто создав в своем домене фиктивный скрипт, который перенаправляет тот же запрос на страницу, которую вы действительно хотите. Например, в вашем случае вы должны создать запрос на http://mydomain.com/google.php (или на любом другом языке сценариев, который вы предпочитаете), который затем загрузит страницу Google, используя file_get_contents или аналогичный, и просто echo it вне.

1 голос
/ 23 мая 2013

Вы МОЖЕТЕ делать междоменные запросы, если сервер настроен на это: см. Как работает заголовок Access-Control-Allow-Origin? и Google о заголовке Access-Control-Allow-Origin.

1 голос
/ 19 декабря 2009

Вы не можете делать междоменные запросы с JavaScript. Лучший способ обойти это - использовать ваш сервер в качестве прокси.

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