2013-10-15 4 views
0

Я делаю запрос междоменная от site1.com к site2.com (как поддерживается мной)междоменного с JSONP и JQuery

Это код JQuery на site1.com:

$.ajax({ 
     type: 'POST', 
     url: 'http://site2.com/test/carrousel.cfm', 
     cache: false, 
     async: true, 
     crossDomain: true, 
     dataType: "jsonp", 
     success: function (data, status) { 
      alert(data);} 
     }, 
     error: function (xhr, textStatus, errorThrown) { 
      alert('error'); 
     } 
    }); 

я могу см. запрос, поступающий со статусом 200 в отладчике. Тело ответа также содержит строку, которую я отправляю с сервера. Эта строка: "okay"

Странно, обработчик ошибок всегда уволен, и я не могу получить доступ к данным. Я посылаю Access-Control-Allow-Headers и Access-Control-Allow-Origin заголовки через сервер тоже (я наткнулся на несколько постов с просьбой сделать это)

Я также получаю ошибку сценария говоря: «ХОРОШО» не определено. «OKAY» - это строка, которую я получаю в ответ от сервера. Как это происходит? И как я могу получить этот запрос перекрестного домена для успеха?

Я использую JQuery 1.10.2 & IE 10

Как вы можете видеть, я также использую JSONP & правильные параметры, определенные в документации JQuery для выполнения междоменное запросов

+1

вы говорите, что ответ имеет тип 'jsonp', но ваш ответ представляет собой строку' okay', которая является недопустимой, ответ 'jsonp' должен иметь формат' somemethod (data) '. Поскольку ваш сервер отправляет заголовки «Access-Control-Allow-Origin' ... меняет тип данных на« текст »и пытается –

+1

* Тело ответа также содержит строку, которую я отправляю с сервера. Эта строка: «okay» * «okay» 'недействительна jsonp. кросс-доменные заголовки не нужны для запросов jsonp. –

+0

@ArunPJohny: установка типа текста по-прежнему вызывает ошибку. – PoeHaH

ответ

0

Вот простой JSONP Excahnge:

  1. клиент делает <script src="target.js?arg=foo"> тег

  2. Сервер получает запрос для target.js.

  3. РНР на стороне сервера тела target.js является clientFunction("$_GET['arg']")

  4. клиент получает обратно скрипт: clientFunction("foo")

  5. Клиент выполняет сценарий, который вызывает функцию на стороне клиента clientFunction для запуска, с аргументом "foo".

Очевидный навынос здесь: ответы JSONP скрипты. Если ваш клиент запрашивает ответ JSONP, он запрашивает для скрипта. Поэтому содержание «okay» рассматривается как сценарий, но okay не был объявлен как допустимый идентификатор в среде сценариев клиента, поэтому он вызывает ошибку. (В моем примере выше, мы предполагаем, что clientFunction был объявлен на стороне клиента, прежде чем обмен происходит.)

Если у вас есть контроль над сервером и может служить заголовки CORS как Access-Control-Allow-Origin, то вам не нужно JSONP. Просто сделайте обычный запрос Ajax.

+0

Просто имейте в виду, что если вы хотите поддерживать IE <10, вам нужно добавить поддержка CORS для jQuery, чтобы она работала в IE8 +. он не будет работать в IE7 независимо от того, как он не поддерживает CORS. –

+0

А именно, добавьте поддержку IE8 + с помощью плагина: http://stackoverflow.com/questions/8688703/is-there-a-jquery-solution-that-uses-cors-when-available-and-falls-back-to -xdoma – apsillers

+0

Это не позволяет мне делать обычные запросы ajax. Он по-прежнему запускает дескриптор ошибки. – PoeHaH

1

Вы должны попробовать Ajax-cross-origin - плагин jQuery.

http://www.ajax-cross-origin.com/

$.ajax({ 
    crossOrigin: true, 
    url: url, 
    success: function(data) { 
     console.log(data); 
    } 
}); 

Вы сможете использовать Ajax междоменное без ограничений!

Смежные вопросы