何时使用 json 以及何时使用 jsonp 与 jquery $.ajax?
Posted
技术标签:
【中文标题】何时使用 json 以及何时使用 jsonp 与 jquery $.ajax?【英文标题】:When to use json and when jsonp with jquery $.ajax? 【发布时间】:2012-05-05 21:51:35 【问题描述】:在我们的网站中,有些页面是 SSL,有些是非 SSL。
例如:
http://www.example.com/search/patients
https://www.example.com/patients
现在我在http://www.example.com/search/patients
页面上搜索患者,并通过jQuery $.ajax
函数和dataType=json
向https://www.example.com/patients
发送服务器请求。我无法获取数据。
问题:
当我们在同一台服务器上从http
到https
或https
到http
请求时,我应该使用jsonp
吗?
如果我对两个 URL 都使用 SSL,那么它是否仅适用于 dataType=json
谢谢
【问题讨论】:
我猜AJAX请求可以通过相对路径而不是绝对路径进行。 【参考方案1】:由于Same Origin Policy,只有在以下情况下才允许您的 ajax 请求: 域名、应用层协议和(在大多数浏览器中)端口 运行脚本的 html 文档个数相同
在您的情况下,应用层协议不同,这就是您的脚本失败的原因。
可能的解决方案是:
JSONP,需服务器提供
CORS,这是一个更“优雅”和干净的解决方案,但尚未被 IE 完全支持(IE7 不支持,IE8 有一些限制)
【讨论】:
【参考方案2】:如果您对两个 URL 都使用 SSL,它应该可以工作。同样正如@Waqas Raja 所建议的,最好使用相对 URL。
例如$.ajax(url: '/search/patients')
【讨论】:
【参考方案3】:您需要使用 CORS、代理或 JSONP 从不同来源获取内容。更改方案(从 http 到 https 或其他方式)正在更改来源。
将数据从安全服务器提取到不安全的页面会消除使用 SSL 的许多好处。
如果您通过 SSL 获取页面和数据源,那么您可以使用纯 JSON,并且不会引入这些安全问题。
【讨论】:
以上是关于何时使用 json 以及何时使用 jsonp 与 jquery $.ajax?的主要内容,如果未能解决你的问题,请参考以下文章
何时使用 .First 以及何时将 .FirstOrDefault 与 LINQ 一起使用?
何时使用 LEFT JOIN 以及何时使用 INNER JOIN?
React 测试库:何时使用 userEvent.click 以及何时使用 fireEvent