从jQuery访问Web服务 – 跨域

我试图从jQuery客户端访问一个wcf服务

特别是这个例子http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4

当客户端网页与服务位于同一域时,一切正常

一旦我将客户端网页移动到另一个域,它就会中断。 它无法访问服务,请求失败

对于所有示例,ASMX,REST和WCF都会发生这种情况

任何想法如何让这个工作交叉daomain?

您正在运行同源策略。 您访问的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); } 

您可能想要查看JSONP(带填充的JSON) 。 简而言之,它涉及向页面添加脚本元素,并将Web服务URL作为src。 然后,Web服务将JSON包装为回调函数中的第一个参数,该函数在解析脚本时执行。

脚本元素不受同源策略的约束 ,这是他们能够解决这个问题的方法。

通常,你将无法; 现代浏览器限制此操作以防止跨站点脚本攻击。 解决它的一种方法可能是使用“填充”JSON,JSONP,它将结果插入到页面上的脚本元素中。 这里有一个Microsoft WCF示例,它似乎就是这样做的。

我在2天内遇到了同样的问题,我找到了解决方案,经过谷歌搜索后它显得很优雅。 我需要一些小部件客户端的xss Ajax,它将数据流从层网站拉到我的Rails应用程序。 这是我的方式。