是否可以使用javascript从另一个域/服务器下载JSON对象?

时间:2010-02-01 19:40:19

标签: javascript jquery json cross-domain

那段代码会是什么样的?

4 个答案:

答案 0 :(得分:5)

其他域/服务器需要支持JSONP,它基本上将JSON包装在回调中。

在jQuery中,调用看起来像这样:

$.getJSON(
     'http://otherdomain.com/api/whatever?callback=?', 
     { key: 'value', otherkey: true },
     function(data){
        //handle response
     }
);

来自其他服务器的实际响应(如果您查看实际发送的内容)将如下所示:

// With this url:
http://domain.com/api/method?callback=the_callback_function_name

// The response would look like this:
the_callback_function_name({ "json": "data here"});

当您提供额外的callback=?时,jQuery getJSON方法会自动处理JSONP。请记住一些使用不同名称的网站,例如json_callback=?。重要的是,您将其作为网址的一部分包含在内,并且不要尝试将callback: '?'添加到data功能的getJSON部分。

答案 1 :(得分:4)

仅通过JSONP。无论你使用jQuery还是其他一些框架,它都归结为这样的脚本块:

<script type="text/javascript" src="http://path.to/your/javascript"></script>

<script>块不受跨域限制的影响。需要注意的是,该服务也应该支持JSONP。如果脚本返回如下的JSON对象:

{a: 0, b: 1}

将评估对象,但没有任何反应。但是JSONP服务接受类似这样的回调函数名称

<script type="text/javascript" src="http://path.to/your/javascript?callback=yourCallbackFunction"></script>

并将数据作为参数包装到您的回调中,如下所示:

yourCallbackFunction({a: 0, b: 1});

这样在评估脚本时调用该函数。

答案 2 :(得分:1)

您可以使用JSONP。在jQuery中,尝试getJSON:http://api.jquery.com/jQuery.getJSON/

答案 3 :(得分:0)

相反,您应该使用本地代理。设置一个asp.net/php页面,它将在后端加载远程页面,然后使用ajax加载代理页面。