Javascript何时和完成功能使用

时间:2015-05-07 08:18:07

标签: javascript jquery

我试图在第三个函数中调用两个不同的函数但是一个接一个地调用。一个函数有一个ajax调用,其值在其他函数中使用。这是一步一步的过程。我不想在另一个中使用一个。

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();但仍然毫无用处。

先谢谢。

更新: - 以下是基于@dweweiver提供的解决方案的问题的答案。

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

感谢大家的反馈。

2 个答案:

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

答案 1 :(得分: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函数,该函数将成功生成ajax请求并返回成功数据,该数据设置为函数作用域变量jsonData。 完成此过程后,将调用f2,它将开始使用jsonData,这只是从f1函数调用收到的数据。

快乐编码:)