使用https而不是http时,JSONP请求失败
我有一个API客户端,它使用JQuery发出JSONP请求。 当使用SSL时,此API客户端不使用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); }); } });
我看到对url中指定的API主机做出了适当的请求, 成功的回调函数通过传递给它的格式正确的数据被正确调用。
但是,当我将API客户端的上述URL更改为https://apiclient.com时 ,API主机上未发现任何请求。 我发现日志的任何一方都没有错误。
注意:API客户端唯一的区别是http到https 。
使用https域时,您是否需要以不同方式处理JSONP请求?
谢谢。
修改:此问题仅适用于Chrome。 它适用于Firefox和Safari。 但是我在FireFox上收到一个快速警告,询问我是否要从加密站点发出未加密的请求。 我允许它,再也没有看到警告。
找到了解决方案。 问题是JQuery和其他资源是从非安全站点导入的。 解决方案是从https引用。
在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/
有关此问题的类似post: JSONP使用JQuery从HTTPS协议获取JSON
更改协议与更改URL的任何其他部分具有相同的效果 – 它将触发违反同源策略并强制您进入跨域模式。 如果您已经有跨域访问工作,它将继续使用https以及使用http。
你可以使用getJSON作为例子
$.getJSON('ajax/test.json', function(data) { $('.result').html('' + data.foo + '
' + '' + data.baz[1] + '
'); });
检查完整的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('' + data.foo + '
' + '' + data.baz[1] + '
'); });
在Firefox中使用jquery失败来获取AJAX https POST请求
我希望这有帮助