我有一个API客户端,它使用JQuery发出JSONP请求。一切正常 但是,当使用SSL时,此API客户端未使用SSL时会失败。
例如,我有一个网址 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主机发出了适当的请求,并且成功中的回调函数已正确调用,并且传输了正确格式的数据。
但是,当我将API客户端的上述网址更改为 https://apiclient.com 时, API主机上未发现任何请求。我发现日志的任何一方都没有错误。
注意:API客户端唯一的区别是 http 与 https 。
使用https域时,是否需要以不同方式处理JSONP请求?
感谢。
编辑: 仅在Chrome上才会出现此问题。它适用于Firefox和Safari。 但是我在FireFox上收到一个快速警告,要求我即将发出未加密的请求 加密网站。我允许它,再也没有看到警告。
答案 0 :(得分:11)
找到解决方案。问题是JQuery和其他资源是从非安全站点导入的。解决方案是从https引用。
答案 1 :(得分:1)
对于http和https的JSONP请求应该没有任何不同。
请尝试使用.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 To Acquire JSON From HTTPS Protocol with JQuery
答案 2 :(得分:1)
更改协议与更改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 requests using jquery fail in Firefox
我希望这有帮助