我正在尝试从jQuery客户端访问wcf服务
具体地说,这个示例http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4
当客户端网页与服务位于同一域时,所有功能都能正常工作
一旦我将客户端网页移动到另一个域,它就会断开。无法到达服务,请求失败
对于所有示例,ASMX、REST和WCF都会发生这种情况
有什么办法让这个交叉口工作起来吗?
发布于 2010-04-23 17:48:45
您遇到的是同源策略。您正在访问的web服务必须与发出请求的jQuery脚本位于同一个域中。所有浏览器都会强制执行此策略,以防止对web应用程序的跨站点脚本和代码注入攻击。
有很多方法可以绕过它,包括JSONP、Proxies或Flash。
在我们建议您应该使用哪种技术之前,我们需要更多的信息。我倾向于支持JSONP。但与此同时,这里有一些轻松的读物:
http://taossa.com/index.php/2007/02/08/same-origin-policy/
https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript
下面是JSONP的一个使用示例:
url = "http://www.test.com/getData.php?callback=parseResults";
document.body.appendChild((function() {
var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.src = url;
return newScript;
})());
function parseResults(data) {
alert(data);
}
发布于 2010-04-23 17:48:53
你可能想看看JSONP (JSON with Padding)。简而言之,它涉及到向页面添加一个script元素,并将web服务url作为src。然后,web服务将JSON包装为回调函数中的第一个参数,该回调函数在解析脚本时执行。
脚本元素不受Same Origin Policy的约束,这就是它们能够解决此问题的方法。
发布于 2010-04-23 17:50:25
通常,您无法做到这一点;现代浏览器对此进行了限制,以防止跨站点脚本攻击。一种解决方法是使用“填充的”JSON,即JSONP,它将结果插入到页面上的脚本元素中。有一个Microsoft WCF sample here似乎可以做到这一点。
https://stackoverflow.com/questions/2697557
复制相似问题