一尘不染

跨域脚本问题和JSONP

json

我们的客户要求我们为其站点提供Widgits。他们想链接到我们以获得Html和操纵Html并执行异步请求所需的jQuery。我知道存在跨域安全限制,可以防止这种情况的发生,但是通过使用JSONP作为数据传输格式可以缓解其中的一些限制。

我很难找到关于我要达到的目标的可能解释。有人可以帮我吗?


阅读 168

收藏
2020-07-27

共1个答案

一尘不染

简而言之,所有AJAX请求(和跨窗口脚本)都应遵循Same Origin
Policy
。JSONP(带填充的JSON)不受相同来源政策的约束,因为它涉及将来自外部域的脚本添加到DOM,脚本本身包含对客户端上已经存在的已知函数的调用,JSON为函数调用的参数。

JSONP无法直接返回HTML或XML,但它可以传递包含HTML或XML数据字符串的对象,而该对象又可以添加到DOM或由客户端解析。

例如,JSONP可能返回:

jsonp_callback({"Errors":"none","Data":"<div id='externalWidget'>Hello!</div>"});

当将此脚本添加到页面时,该函数jsonp_callback将以JSON对象作为其参数执行。然后,该函数将HTML代码添加到页面中。

还有其他方式可以实现您想要的。例如,如果客户端不需要以任何方式处理数据,则可以通过HTML文档提供一个由客户端页面填充的小部件:

<iframe id="widget" src="http://mysite.com/widget/v1/" />

如果确实需要操纵数据,则将受到上述“同一个起源策略”的阻止。

2020-07-27