为什么不是';t jQuery.done()无法识别外部函数

为什么不是';t jQuery.done()无法识别外部函数,jquery,deferred,Jquery,Deferred,我有这样的想法: //works fine $.ajax("info.txt") .done(function(data) { console.log("works"); }) //throws an error, stating CheckIt() inside the .done() is not a function $.ajax("info.txt") .done(function(data) { CheckIt(data

我有这样的想法:

  //works fine
  $.ajax("info.txt")
    .done(function(data) {
      console.log("works");
    })
  //throws an error, stating CheckIt() inside the .done() is not a function
  $.ajax("info.txt")
    .done(function(data) {
      CheckIt(data);
    });

  function CheckIt(da) {
    console.log("it works");
  }
我也有这样的想法:

  //works fine
  $.ajax("info.txt")
    .done(function(data) {
      console.log("works");
    })
  //throws an error, stating CheckIt() inside the .done() is not a function
  $.ajax("info.txt")
    .done(function(data) {
      CheckIt(data);
    });

  function CheckIt(da) {
    console.log("it works");
  }

我为什么会收到错误,以及如何避免错误,允许我使用其他函数。

您的ajax请求很可能失败。如果将done替换为always,则即使请求失败,也将始终调用它

$.ajax(“https://cat-fact.herokuapp.com/facts/random")
.始终(功能(数据){
检查(数据);
});
功能检查(da){
警惕(“它起作用”);
}

如果将函数声明放在
$之前,是否也会发生同样的情况。ajax
没有尝试过,但让我尝试一下。谢谢-试过了,还是同一个错误。你什么时候直接调用这段代码,还是在Jquery Ready中调用?直接。。。这有关系吗?我认为您不需要在jquery中准备好它,因为它是一个ajax调用?它工作正常:可能您声明了两次checkit函数?谢谢,但我不希望它总是调用。。。只有在成功的情况下才可以。您的请求成功了吗?有没有办法通过“完成”来检查它是否已完成。。。。并始终检查正确/错误