Подтвердить что ты не робот

Запрос JSONP завершается с ошибкой при использовании https вместо http

У меня есть клиент 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 спрашивает, что я собираюсь сделать незашифрованный запрос от зашифрованный сайт. Я допустил это и больше не видел предупреждения.

4b9b3361

Ответ 1

Найден решение. Проблема заключалась в том, что JQuery и другие ресурсы были импортированы из небезопасных сайтов. Решение было ссылкой на https.

Ответ 2

В запросе 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

Ответ 3

Изменение протокола - это тот же эффект, что и изменение любой другой части 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

Надеюсь, это поможет