我有一个应用程序接口客户端,它使用JQuery发出JSONP请求。当此API客户端不使用SSL时,一切正常,但是当使用SSL时,一切都会失败。
例如,我有一个URL,我从该域发出以下http://apiclient.com请求:
$.ajax({
url: url,
dataType: "jsonp",
contentType: "application/json; charset=utf-8",
success: function(data)
{
$.each(data.services, function(index, service) {
processService(service);
});
}
});
我看到对成功中的url和回调函数中指定的API host发出了适当的请求,并向其传递了格式正确的数据。
但是,当我将API客户端的上述URL更改为https://apiclient.com,时,API主机上没有观察到请求。我在日志的两边都看不到错误。
注意:唯一的区别是客户端的https到https。
在使用https域名时,您是否需要以不同的方式处理JSONP请求?
谢谢。
编辑:此问题仅在Chrome中观察到。它适用于Firefox和Safari。然而,我在FireFox上收到了一个快速警告,询问我即将从加密的站点发出未加密的请求。我允许这样做,并且再也没有看到警告。
发布于 2013-01-09 01:29:03
找到了解决方案。问题是JQuery和其他资源是从不安全的站点导入的。解决方案是参考https。
发布于 2013-01-08 00:17:45
对于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
发布于 2013-01-08 14:58:29
更改协议与更改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>');
});
索鲁斯AJAX https POST requests using jquery fail in Firefox
我希望这能帮到你
https://stackoverflow.com/questions/14133484
复制相似问题