【问题标题】:Can retrieve data with $.getJSON but not $.ajax可以使用 $.getJSON 但不能使用 $.ajax 检索数据
【发布时间】: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


【解决方案1】:

有语法错误async: false删除;并添加,

这是一个工作小提琴http://jsfiddle.net/mayooresan/FhfVW/2/

【讨论】:

  • 当然,async: false 无论如何对于 JSONP 都是无效的。 JSONP总是是异步的。 (AND async: false 已弃用,将在 jQuery 的未来版本中删除。)
  • 哦天哪...简单得令人尴尬,谢谢!有时这些事情需要第二双眼睛!
  • @NickF:如果你在浏览器上打开 JavaScript 控制台,它会告诉你这样的语法错误。 (如果您使用的浏览器没有 JavaScript 控制台或清除错误,请切换到现代浏览器。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多