【发布时间】:2013-04-04 01:39:58
【问题描述】:
我正在尝试从 cloudmade 路由 API 服务中检索数据。我可以使用带有以下代码的 $.getJSON 来做到这一点:
<button id="getJSON">Get JSON</button>
$(function () {
$("#getJSON").click(function () {
$.getJSON("http://routes.cloudmade.com/c6f2762bfe00414f822a9dec443569f5/api/0.3/51.500,0.100,51.500,0.1001/car.js?callback=?", function (data) {
var test = data.route_geometry;
alert(test);
});
});
});
另见http://jsfiddle.net/V3qgZ/72/
当我尝试使用 $.ajax 执行相同的请求时,我无法检索数据,但我不确定我的错误在哪里。我想使用 $.ajax 的原因是因为 $.getJSON 是异步的,其中 $.ajax 可以设置为 'async: false'。 $.ajax 请求的代码在这里:
<button id="getJSON">Get JSON</button>
$(function () {
$("#getJSON").click(function () {
var url = "http://routes.cloudmade.com/c6f2762bfe00414f822a9dec443569f5/api/0.3/51.500,0.100,51.500,0.1001/car.js";
$.ajax({
async: false;
dataType: "jsonp",
url: url,
success: function (data) {
test = data.route_geometry;
alert(test);
}
});
});
});
也可以在http://jsfiddle.net/FhfVW/1/
非常感谢任何帮助!
【问题讨论】:
-
老兄,
async:false是万恶之源! -
为什么?不幸的是,我似乎别无选择!
-
因为它会阻止您的整个页面,所以在您加载数据时没有 JavaScript 将起作用。在某些非常糟糕的情况下(如旧 IE),它会阻止您的整个浏览器(包括其他选项卡)。您总是有选择的余地,99.999% 的 JavaScript 脚本都是异步编写的。
-
...除非你的老板强迫你使用
async:false。在这种情况下:找到新工作。 ;) -
@NickF:不仅做你有一个选择,而且事实上,你的
async: false正在被jQuery 主动忽略,因为你说过dataType: "jsonp"。 JSONP 本质上是总是异步的 (async: true)。
标签: javascript jquery ajax