使用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客户端唯一的区别是httphttps

使用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请求

我希望这有帮助