2013-05-06 5 views
0

Я провел всю пятницу на этом, и решил, что приду в понедельник и посмотреть, смогу ли я помочь. Вот резюме:JSONP не возвращает данные в https

У меня есть два веб-сайта, один использует AJAX для вызова в http-обработчике на другом веб-сайте, чтобы вернуть токен (строку). Сначала я использовал json-вызов, который отлично работает, но когда сайт, к которому я обращаюсь, использует https, данные не возвращаются.

Я получаю сообщение об успешном завершении 200, и я получаю данные обратно с помощью http, но не https. У меня эта проблема работает на моей локальной машине. Я проверяю, что если я использую тот же URL-адрес, данные будут возвращены в моем браузере.

Кроме того, когда в режиме https я устанавливаю точку останова, похоже, что он даже не вызывает код для передачи токена.

Спасибо заранее!

  function onSuccessGetToken(token, url, type) { 
     var getTokenUrl = url + "SSOtoken=" + token; 

     //verify the URL is correct, for testing 
     alert(getTokenUrl); 

     $.ajax({ 
      url: getTokenUrl, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       onSuccess(JSON.stringify(msg).replace(/\"/g, ""), url, type); 
      }, 
      error: function (msg) { 
       //using jsonp, this always goes here, but no data is returned 
       alert(JSON.stringify(msg)); 
       onErrorGetToken(msg); 
      } 
     }); 
    } 
+0

JSONP и JSON - это две совершенно разные вещи. Ваше название вопроса говорит о JSONP, но я уверен, что вы действительно говорите о JSON. –

ответ

1

Вы не показали, что getTokenUrl содержит, но из вашего описания проблемы, я бы сказал, что вы работаете в Same Origin Policy, что предотвращает АЯКС вызовов между различными «происхождением». Примечание «происхождение» не означает «домен», различные домены различного происхождения, но так же различные протоколы (http против https), различные порты (80 против 8080, например) и т.д.

В вашем вопросе, вы говорите о JSONP, но вы не используете JSONP. You может использовать JSONP для обработки запросов перекрестного происхождения, вот для чего он нужен. Для этого используйте "jsonp" как ваш dataType и убедитесь, что ваш сервер возвращает правильный ответ JSONP (включая получение имени ответного запроса JSONP из строки запроса). Подробнее о JSONP в the Wikipedia article on it.

Другая стратегия для совершения перекрестных вызовов, когда вы управляете обоими источниками, заключается в использовании Cross-Origin Resource Sharing. Здесь ваш сервер отвечает на запрос «предполетный», который посылает браузер, который сообщает браузеру, будет ли сервер принимать вызов из источника документа. Browser support, поскольку в наши дни это довольно хорошо. В IE9 и более ранних версиях он поддерживается не через стандартный объект XMLHttpRequest (который используется JQuery). Начиная с IE10, они, наконец, понимают это правильно.


Unrelated: Ваш ajax вызов, вы указываете contentType: "application/json". Это говорит серверу, что то, что вы отправили , отправляет - это JSON, не сообщая jQuery, чтобы обработать ответ как JSON. Это еще один, dataType, который вы также указываете (хотя с правильно настроенным сервером вам не нужно указывать — сервер должен возвращать заголовок Content-Type с правильным MIME-типом).

+0

getTokenUrl работает правильно, я предупреждаю и могу проверить, работает ли он в режиме http или https. Ваш комментарий о той же самой политике происхождения, я думал, что это связано с доменом, но вы можете быть правы с портом, я попытаюсь запустить мой сайт в режиме https и посмотреть, поможет ли это. Спасибо за ваш ответ. – dave2118

+0

Я просто использовал https на обоих сайтах, и он работает. Не могу поверить, что я потратил всю пятницу на то, что просто. Спасибо за помощь! – dave2118

+0

@ dave2118: Добро пожаловать! Рад, что помогло. Да, некоторые браузеры довольно тонкие в отчетах SOP.FWIW, если вы используете Chrome и просматриваете инструменты разработчика, у него есть довольно четкое сообщение об ошибке (в настоящее время это не всегда). Я не знаю о других браузерах ... –

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