首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从jQuery访问web服务-跨域

从jQuery访问web服务-跨域
EN

Stack Overflow用户
提问于 2010-04-23 17:43:36
回答 4查看 23.6K关注 0票数 18

我正在尝试从jQuery客户端访问wcf服务

具体地说,这个示例http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4

当客户端网页与服务位于同一域时,所有功能都能正常工作

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

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

有什么办法让这个交叉口工作起来吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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的一个使用示例:

代码语言:javascript
复制
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);
}
票数 10
EN

Stack Overflow用户

发布于 2010-04-23 17:48:53

你可能想看看JSONP (JSON with Padding)。简而言之,它涉及到向页面添加一个script元素,并将web服务url作为src。然后,web服务将JSON包装为回调函数中的第一个参数,该回调函数在解析脚本时执行。

脚本元素不受Same Origin Policy的约束,这就是它们能够解决此问题的方法。

票数 1
EN

Stack Overflow用户

发布于 2010-04-23 17:50:25

通常,您无法做到这一点;现代浏览器对此进行了限制,以防止跨站点脚本攻击。一种解决方法是使用“填充的”JSON,即JSONP,它将结果插入到页面上的脚本元素中。有一个Microsoft WCF sample here似乎可以做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2697557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档