我可以通过回调添加 getJSON 的 done() 函数吗?

Can I add getJSON's done()-functions by callback?

在此代码上:

 function hello(){
     alert("hello");
 }
 function hi(){
     alert("hi");
 }

 jQuery.getJSON('foo.bar',function(data){
     if (data.foobar) {
         this.done(hello);
     }
     alert('callback done');
 }).done(hi);

并假设这个 returns 来自 foo.bar

{"foobar":true}

我喜欢按以下顺序接收警报:

  1. 回调完成
  2. 你好

但我无法在 success-回调中添加 done()-函数。

你有没有提示我如何在 success-回调中添加一个 done()-函数?

jqXHR对象是回调函数的第三个参数:

jQuery.getJSON('foo.bar', function(data, textStatus, jqXHR) {
    if (data.foobar) {
        jqXHR.done(hello);
    }
    alert('calback done');
}).done(hi);

我认为您一开始就不应该尝试组合回调和 done() 处理程序,更不用说像这样将它们交织在一起了。只需使用一个 done() 处理程序:

jQuery.getJSON('foo.bar').done(function (data) {
    hi();
    if (data.foobar) {
        hello();
    }
});

或者如果您担心 hi() 中的失败会阻止其余部分的执行,您可以将它们分别传递给 done()

jQuery.getJSON('foo.bar').done(hi, function (data) {
    if (data.foobar) {
        hello();
    }
});