【问题标题】:What has to be changed client-side or server-side to make getJSON() work?必须在客户端或服务器端更改哪些内容才能使 getJSON() 工作?
【发布时间】:2011-08-07 11:20:48
【问题描述】:

我正在使用一些已经创建的 Web 服务,我需要使用 ajax 调用它们。我正在处理的站点托管在与 Web 服务不同的域中。我现在知道这会导致同源策略的问题。

我正在尝试使用 JSON 来解决它,基于文章:

JQuery API

IBM on cross-domain comms

这里还有很多其他问题。

我已经尝试了以下代码(将实际域替换为“webservice”):

    <script type="text/javascript">
          $(document).ready(function(){
        $.getJSON("http://webservice/restserver.aspx?",
        {
            method: "userInfo",
            userID: "039304303930302",
            sessionID: "STRING",
                format: "json"

        },
         function(data) {
                alert("GET Returned");
        });

});
</script>

1) 我是 JSON 和 AJAX 的新手,这有什么严重的问题吗

2) Web 服务是否需要回调,例如 - "&callback=?"添加到它

3) 有没有其他方法可以绕过跨域调用

任何建议或帮助都将受到欢迎,因为我已经为此工作了很长时间。

谢谢!

【问题讨论】:

    标签: jquery ajax json same-origin-policy


    【解决方案1】:

    您需要不同于 JSON 的 JSONP。您需要修改 Web 服务方法,以便它可以采用附加参数(例如 callback=foo)并将 JSON 响应包装在此函数中:

    foo({ first_name: 'john', last_name: 'smith' })
    

    为了实现跨域 AJAX 调用,jQuery 使用隐藏的 &lt;script&gt; 标记,因此必须将 Web 服务配置为接受 GET 请求。

    $.getJSON() 方法文档包含一个使用 Flickr 的示例,您可以尝试运行该示例并使用 FireBug 查看确切的请求/响应。你可以see it in action here

    【讨论】:

    • 谢谢我现在可以得到响应我在解析响应时遇到了一些麻烦,Web 服务是否必须使用 JSON 响应?是否有任何地方的示例?然后可以使用function(data) { $.each(data.items, function(i,item){ alert(item.name); }); 或类似的东西来解析它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多