【发布时间】:2011-01-11 21:04:33
【问题描述】:
该代码会是什么样子?
【问题讨论】:
标签: javascript jquery json cross-domain
该代码会是什么样子?
【问题讨论】:
标签: javascript jquery json cross-domain
您应该使用本地代理。设置一个asp.net/php页面,在后端加载远程页面,然后使用ajax加载代理页面。
【讨论】:
仅通过 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});
以便在评估脚本时调用该函数。
【讨论】:
其他域/服务器需要支持 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=?。重要的部分是您将其作为 URL 的一部分包含在内,并且不要尝试将 callback: '?' 添加到 getJSON 函数的 data 部分。
【讨论】:
您可以使用 JSONP。在 jQuery 中,尝试 getJSON:http://api.jquery.com/jQuery.getJSON/
【讨论】: