必须在客户端或服务器端更改哪些内容才能使 getJSON() 工作?

Posted

技术标签:

【中文标题】必须在客户端或服务器端更改哪些内容才能使 getJSON() 工作?【英文标题】:What has to be changed client-side or server-side to make getJSON() work? 【发布时间】: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) 有没有其他方法可以绕过跨域调用

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

谢谢!

【问题讨论】:

【参考方案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); ); 或类似的东西来解析它

以上是关于必须在客户端或服务器端更改哪些内容才能使 getJSON() 工作?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 文件不会在浏览器中打开 - 只能下载。我需要进行哪些更改才能使其正常工作?

需要进行哪些更改才能使此代码检测多个人脸而不是仅一个人脸

Wordpress 不和谐预览

识别服务器端客户端浏览器中的内容更改

我需要更改哪些内容才能正确实施 SOLID 设计?

贝宝 checkout.js。在哪些情况下选择客户端、服务器端或混合集成?