0

我在 jQuery 1.8.2 上,我正在做一个这样的 JSONP 调用:

    function foo(data) {
      console.log(data)
    }

    $.ajax({
      type: 'GET',
      url: http://xxx.cloudfront.net/posts.json?category=News&callback=foo,
      dataType: 'jsonp',
      cache: true,
      jsonp: false
    }).done(function (data) {

    }).fail(function (XHR, status, error) {
      console.log(error);
    });

当我运行它时,正确的数据响应将返回到 foo 回调。但是该错误也会触发,并且控制台将错误记录为Error {}. 从 Stackoverflow 上的其他地方阅读看来,这是因为响应包含在回调中,并且 jQuery 期望纯 JSON。我应该忽略这个错误吗?

4

2 回答 2

2

您不应该有一个foo作为回调的全局函数,而是让 jQuery 自动创建该全局函数并将结果传递给done回调。它确实希望调用自己的函数,否则会触发错误。

$.ajax({
  type: 'GET',
  url: "http://xxx.cloudfront.net/posts.json?category=News&callback=?",
  dataType: 'jsonp',
  jsonpCallback: 'foo', // for caching
  cache: true
}).done(function (data) {
  console.log(data);
}).fail(function (XHR, status, error) {
  console.log(error);
});
于 2013-09-16T16:48:07.917 回答
1

您已经从 AJAX 调用中专门删除了 JSONP 回调,尝试jsonp : false从您传入的选项对象中省略$.ajax,然后删除您创建的回调函数 ( foo) 并让 jQuery 为您完成工作。

文档可在此处找到:http: //api.jquery.com/jquery.ajax/

于 2013-09-16T16:47:54.430 回答