是否有理由不将 JSONP 用于 AJA~X 请求?
Posted
技术标签:
【中文标题】是否有理由不将 JSONP 用于 AJA~X 请求?【英文标题】:Are there reasons not to use JSONP for AJA~X requests? 【发布时间】:2010-09-06 08:36:30 【问题描述】:如果您正在构建 AJA~Xy
应用程序,即使您不打算处理任何 cross-domain
请求,使用 JSONP
请求/响应是否有任何不利之处?
我唯一能想到的是回调包装器有几个额外的字节......
编辑:
我发现this 也表明security and error handling
是潜在问题...
没有错误处理。
script injection
要么有效,要么无效。 如果injection
出现错误,它将到达页面,并且缺少窗口范围的错误处理程序(坏、坏、非常坏),您需要确保返回值在server side
上有效。
我认为error handling
不是什么大问题...我们中的大多数人会使用库来生成JSON
...我的回答格式正确与此问题无关.
和安全性:
网络上有一些文档可以提供帮助,但作为粗略检查,我会检查
server side
脚本中的引荐来源。
这似乎是任何类型响应的潜在问题...当然,JSONP
在安全领域没有什么独特之处...?
【问题讨论】:
只是好奇,为什么是“AJA~X”而不是“Ajax”?这是一种强调数据格式“不是”XML 的噱头吗? 是的......对不起......我感觉很花哨 【参考方案1】:我想说最大的限制可能是让浏览器渲染一个脚本标签来调用服务器的额外开销。另外,JSONP 是否真的被认为是 AJAX,因为它实际上并不使用 XMLHttpRequest 对象?
【讨论】:
嗯,这不是 XMLHttpRequest 吗? 是的,因为我打字太快弄混了。【参考方案2】:缺点?这是相当有限的——你触发一个“GET”请求并取回一些已执行的脚本。如果您的服务器抛出错误,您不会得到错误处理,因此您还需要将所有错误包装在 JSON 中。您无法真正取消或重试请求。对于动态生成的<script>
标签,您将受到各种浏览器作者对“正确”行为的看法的摆布。调试有点困难。
也就是说,我偶尔使用过它,并且没有受到影响。 YMMV。
【讨论】:
【参考方案3】:可以在 jsonp 调用失败时检索错误。
http://code.google.com/p/jquery-jsonp/
希望对你有帮助。
【讨论】:
【参考方案4】:这是您可能需要考虑使用 JSONP 的另一点。可能存在内存泄漏。
http://neil.fraser.name/news/2009/07/27/
【讨论】:
以上是关于是否有理由不将 JSONP 用于 AJA~X 请求?的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery 1.5 将请求作为 jsonp 发送,将响应解释为文本