2015-01-02 2 views
0

В этом коде:Могу ли я добавить обработанные функции getJSON посредством обратного вызова?

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); 

и предполагаю, что это возвращается из foo.bar

{"foobar":true} 

Мне нравится иметь предупреждения в таком порядке:

  1. обратного вызова сделано
  2. привет
  3. привет

Но я не могу добавить done() -функцию в success -callback.

У вас есть намек, как я могу добавить done() -функцию внутри success -callback?

+0

Почему вы пытаетесь это сделать ? Похоже, что полный беспорядок потока программ идет в любом другом направлении. Не могли бы вы дать нам конкретный пример используемого варианта использования, который вы пытаетесь решить? – JLRishe

ответ

1

jqXHR объект является третьим аргументом функции обратного вызова:

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

Я не думаю, что вы должны пытаться объединить функции обратного вызова и обработчики 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(); 
    } 
}); 
Смежные вопросы