我们的客户要求我们为其站点提供Widgits。他们想链接到我们以获得Html和操纵Html并执行异步请求所需的jQuery。我知道存在跨域安全限制,可以防止这种情况的发生,但是通过使用JSONP作为数据传输格式可以缓解其中的一些限制。
我很难找到关于我要达到的目标的可能解释。有人可以帮我吗?
简而言之,所有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代码添加到页面中。
jsonp_callback
还有其他方式可以实现您想要的。例如,如果客户端不需要以任何方式处理数据,则可以通过HTML文档提供一个由客户端页面填充的小部件:
<iframe id="widget" src="http://mysite.com/widget/v1/" />
如果确实需要操纵数据,则将受到上述“同一个起源策略”的阻止。