那段代码会是什么样的?
答案 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加载代理页面。