首页 文章

从jQuery访问Web服务 - 跨域

提问于
浏览
18

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

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

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

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

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

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

4 回答

  • 10

    您正在运行同源策略 . 您正在访问的Web服务必须与发出请求的jQuery脚本位于同一域中 . 所有浏览器都强制执行此策略,以防止 - 例如 - 跨Web站点脚本和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);
    }
    
  • 0

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

    脚本元素免于Same Origin Policy,这是他们能够解决这个问题的方法 .

  • 0

    通常,你赢了't be able to; modern browsers restrict this to prevent cross-site scripting attacks. One way around it may be to use 2701963 JSON, JSONP, which inserts the results in a script element on your page. There' s Microsoft WCF sample here似乎这样做 .

  • 1

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

相关问题