Ответ 1
Найден решение. Проблема заключалась в том, что JQuery и другие ресурсы были импортированы из небезопасных сайтов. Решение было ссылкой на https.
У меня есть клиент API, который делает запрос JSONP с помощью JQuery. Все работает нормально когда этот API-клиент не использует SSL, однако не работает, когда используется SSL.
Например, у меня есть URL http://apiclient.com, и я делаю следующий запрос JSONP из этого домена:
$.ajax({
url: url,
dataType: "jsonp",
contentType: "application/json; charset=utf-8",
success: function(data)
{
$.each(data.services, function(index, service) {
processService(service);
});
}
});
Я вижу, что соответствующий запрос, сделанный на хост API, указанный в URL-адресе, и функция обратного вызова Успешно правильно вызывается с правильно отформатированными данными, переданными на него.
Однако, когда я изменяю URL-адрес клиента API на https://apiclient.com, на хосте API не наблюдается запроса. Я не вижу ошибок в обеих сторонах журналов.
Примечание: разница только http https на стороне клиента API.
Вам нужно обрабатывать запрос JSONP по-разному при использовании домена https?
Спасибо.
Изменить: Этот вопрос наблюдается только в Chrome. Он работает с Firefox и Safari. Однако я получил быстрое предупреждение о том, что FireFox спрашивает, что я собираюсь сделать незашифрованный запрос от зашифрованный сайт. Я допустил это и больше не видел предупреждения.
Найден решение. Проблема заключалась в том, что JQuery и другие ресурсы были импортированы из небезопасных сайтов. Решение было ссылкой на https.
В запросе JSONP для http и https не должно быть различий.
Попробуйте использовать .getJSON вместо:
$.getJSON(url, function(data) {
$.each(data.services, function(index, service) {
processService(service);
});
});
Использование jQuery.ajax() вызовет проблему с несколькими браузерами, но не в случае с jQuery.getJSON() Посмотрите на сайт jQuery для получения дополнительной информации: http://api.jquery.com/jQuery.getJSON/
Там похоже сообщение с этой проблемой: JSONP Чтобы получить JSON из протокола HTTPS с JQuery
Изменение протокола - это тот же эффект, что и изменение любой другой части URL-адреса - это приведет к нарушению политики одного и того же происхождения и приведет вас в междоменный режим. Если у вас уже есть доступ к междоменному доступу, он будет продолжать работать с https, а также с http.
вы можете использовать getJSON, например
$.getJSON('ajax/test.json', function(data) {
$('.result').html('<p>' + data.foo + '</p>'
+ '<p>' + data.baz[1] + '</p>');
});
проверить полную документацию getJSON http://api.jquery.com/jQuery.getJSON/
я ошибаюсь... использование Juqery.ajax вызовет проблему с несколькими браузерами, но не с Jquery.getJSON
http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29
вот пример кросс-домена get JSON
У firefox есть проблема с HTTPS, так как я знаю, что он будет исправлен, если вы отправите свой запрос следующим образом
$.getJSON('ajax/test.json',{}, function(data) {
$('.result').html('<p>' + data.foo + '</p>'
+ '<p>' + data.baz[1] + '</p>');
});
soruce AJAX https POST-запросы с использованием ошибки jquery в Firefox
Надеюсь, это поможет