何时使用 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=jsonhttps://www.example.com/patients 发送服务器请求。我无法获取数据。

问题:

    当我们在同一台服务器上从httphttpshttpshttp 请求时,我应该使用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 一起使用?

为啥以及何时需要展平 JSON 对象?

何时使用 LEFT JOIN 以及何时使用 INNER JOIN?

React 测试库:何时使用 userEvent.click 以及何时使用 fireEvent

使用 Java servlet 时何时打开以及何时关闭 mysql 连接?

何时更喜欢 JSON 而不是 XML?