跨域脚本问题& JSONP

时间:2010-03-29 13:33:27

标签: javascript asp.net-mvc json cross-domain

我们的客户要求我们为其网站提供Widgits。他们希望链接到我们以获取Html& jQuery需要操作Html并执行异步请求。我知道存在跨域安全限制会阻止这种情况发生,但是通过使用JSONP作为数据传输格式可以减轻其中一些限制。

我发现很难找到在我想要达到的目标背景下可能的解释。有人可以请我填一下吗?

3 个答案:

答案 0 :(得分:4)

简而言之,所有AJAX请求(和跨窗口脚本)都受Same Origin Policy的约束。 JSONP(JSON with Padding)不受同源策略的约束,因为它涉及从外部域向DOM添加脚本,脚本本身包含对客户端上已存在的已知函数的调用, JSON作为函数调用的参数。

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

例如,JSONP可能会返回:

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

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

还有其他方法可以达到你想要的效果。例如,如果客户端不需要以任何方式操纵数据,您可以通过客户页面iframed的HTML文档提供小部件:

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

如果他们确实需要操纵数据,他们会被上面列出的同源策略阻止。

答案 1 :(得分:0)

据我所知,JSONP使用SCRIPT标记来加载从您的调用页面加载的域外部的内容。使用SCRIPT标记可以引用外部URL。加载完外部“脚本”后,数据将返回到特定的回调函数,该函数通过外部脚本的位置传递。

jQuery:http://www.insideria.com/2009/03/what-in-the-heck-is-jsonp-and.html

MooTools:http://www.clientcide.com/wiki/cnet-libraries/06-request/00-jsonp

答案 2 :(得分:0)

听起来您可以将easyXDM(http://easyxdm.net/)用于您的目的。 它是一个为您提供跨域消息传递和RPC的库。

您可以轻松地使用它来设置基于iframe的窗口小部件(就像build int Widget类所做的那样http://consumer.easyxdm.net/current/example/widgets.html),或者仅用它来获取原始数据。

您还可以查看xhr示例,该示例可在http://consumer.easyxdm.net/current/example/xhr.html访问跨域ajax,或在http://consumer.easyxdm.net/current/example/methods.html

处访问通用RPC示例