2015-05-07 3 views
4

Я пытаюсь вызвать две разные функции в третьей функции, но один за другим. Одна функция имеет вызов ajax, значения которого используются в другой функции. это шаг за шагом. Я не хочу использовать его в другом.Javascript When and Done Function use

function f1() 
{ 
    // ajax call 
    return r1 
} 

function f2(r2) 
{ 
    // do some of the work based on r2 
} 

function f3() 
{ 
    $.when(f1()).done(function(data){ 
      f2(data) 

    }); 
} 

Я также пробовал с $ .when(). Then(); но все еще бесполезно.

Спасибо, заранее.

ОБНОВЛЕНИЕ: - Ниже приведен ответ на мой вопрос, основанный на решении, предоставляемом @dreamweiver.

var json_data = ''; 
function f1() 
{ 

    $.ajax({ 
     url: "test.php", 
     method: "POST", 
     async : false, 
     data: { }, 
     success:function(data){ 
      json_data = eval(data); 
     } 

     }); 


} 

function f2(t) 
{ 

    console.log("values is "+t); 
} 

function f3() 
{ 
    $.when(f1()).done(function(){ 
     f2(json_data); 
    }); 
} 

Спасибо всем за ваши отзывы.

+1

Пробовали ли вы '$ .when (f1) .done (функция (данные) { f2 (данные) });' –

+3

Если вы используете 'Ajax JQuery (в) 'то вы должны просто иметь возможность сделать:' f1(). then (f2) '. – James

+1

Зачем вам нужна функция f3? предположительно вы хотите установить обещание, а затем вызвать f1? – atmd

ответ

0

Попробуйте этот путь, я испытал на местном уровне, и она прекрасно работает

function deferredCalls() { 
    var jsonData = ''; 
    var f1 = function() 
    { 
     // ajax call 
     $.ajax({ 
     url: "test.html", 
     method: "POST", 
     data: { id : menuId } 
     }).done(function(data) { 
      jsonData = data; //set the data 
     }); 
    } 

    var f2 = function (data) 
    { 
    // do some of the work based on data 
    if(!!data){ 
     //process the data 
    } 
    } 
    $.when(f1).done(function(){ 
     f2(jsonData); 
    }); 
} 

f1 функция вызывается первым, который будет INTURN сделать Ajax запрос и возвращает данные на успех, который установлен на переменную области функции jsonData. Как только этот процесс будет завершен, будет вызываться f2, который начнет использовать jsonData, что является не чем иным, как данными, полученными от вызова функции f1.

Счастливый Coding :)

+0

С этим я не буду в состоянии вызвать f1 & f2 в некоторых других функциях. –

+0

хорошо, что это не проблема, переместите эти функции в глобальную область & оставим все как есть. – dreamweiver

+0

Я пробовал то же самое, но его не работало. –

0

Это должно работать:

function f1() { 
    // Or some other Ajax request that returns a promise 
    return $.getJSON('path/to/your/service'); 
} 

function f2(r2) { 
    // ... 
} 

f1().done(f2); 
Смежные вопросы