междоменный вызов jquery 1.6.2 ajax пытается позвонить из того же домена

У меня есть API, настроенный в другом домене, домене B (api.domainb.com), и я хочу сделать вызов к нему из домена A (www.domaina.com). Однако, когда я делаю вызов из домена A в домен B через jquery ajax, jquery пытается вызвать www.domaina.com/api.domainb.com, что, очевидно, вернет ошибку. Вот соответствующий код javascript

    $.ajax(
      url: 'http://api.domainb.com',
      type: 'GET',
      dataType: 'jsonp',
      data: {hello: 'world'}, 
      crossDomain: true,
      success: function(data){
        alert(JSON.stringify(data))
      }, 
      error: function(error){
        alert(JSON.stringify(error))
      });

В конце концов, код в домене A и домене B будет находиться в одном домене, но сейчас мне нужно сделать междоменный вызов. Любые предложения о том, как сделать эту работу?


person user938301    schedule 10.09.2011    source источник
comment
в исходной версии этого вопроса у меня был URL-адрес как URL-адрес: «api.domainb.com». Было предложено изменить его на «api.domainb.com. Код в исходной версии вопроса был обновлен, чтобы отразить это. Я попытался добавить «http://», но ничего не изменилось — у меня та же проблема.   -  person user938301    schedule 13.09.2011


Ответы (2)


Вам просто не хватает протокола, чтобы вызов Ajax знал, что это другой домен, а не относительный URL-адрес. Попробуйте использовать url: 'http://api.domainb.com'.

person juandopazo    schedule 10.09.2011

Вы не можете совершать междоменные вызовы; браузеры просто не позволяют это вообще. Однако причина, по которой вы наблюдаете описанное вами поведение, заключается в том, что в вашем URL-адресе отсутствует префикс «http://».

Есть кое-что, что можно сделать с помощью достаточно новых API HTML5 чтобы как бы "получить разрешение" на междоменные вызовы.

edit @Dan правильно указывает, что, хотя XMLHttpRequest (то, что люди обычно называют «ajax») не будет выполнять междоменные действия (кроме CORS), можно использовать тот факт, что теги <script> могут ссылаться на другие теги. домены, чтобы собрать службу. Однако код на стороне сервера должен быть другим. (Обычно это называется "JSONP".)

person Pointy    schedule 10.09.2011
comment
Я не эксперт в этом, но IIRC вы можете использовать JSONP, чтобы обойти ограничение, если серверная сторона готова к сотрудничеству. За кулисами это работает с использованием тегов script вместо XHR. - person Dan; 10.09.2011
comment
Да, это правда, но, конечно, тогда это не совсем XHR :-) Однако я уточню ответ. Спасибо! - person Pointy; 10.09.2011
comment
Верно, но я думаю, что смысл абстрагирования jQuery от этой разницы в вызове ajax заключается в том, что XHR и JSONP действительно достигают одного и того же. Конечно, спорить об определениях сложно, но я никогда не считал, что AJAX означает только XHR. - person Dan; 10.09.2011
comment
Я согласен на 100%. Сложно сбалансировать общеупотребительные значения с более строгими определениями, последние, я думаю, имеют ограниченное применение. - person Pointy; 10.09.2011
comment
Я попытался добавить «http» (теперь это отражено в коде вопроса), но у меня та же проблема, что и раньше. - person user938301; 13.09.2011
comment
Он все еще пытается делать запросы к www.domain.com/api.domainb.com? Это кажется очень маловероятным. Реализована ли служба в домене b таким образом, что будет работать запрос JSONP? Вы проверили инструменты отладки, чтобы увидеть, как выглядит реальная транзакция HTTP? - person Pointy; 13.09.2011