2013-01-15 91 views
0

使用回调,我有以下的代码jquery如何在这种情况下推迟工作?

var TK = { 
    List: [], 
    getSectionA: function(listName, callback) 
    { 
     var arrayList = []; 
     $.get('ajax/test.html', {sendName: listName}, function(data) { 

       $.each(data, function() 
       { 
        arrayList = data; 
       }); 
     callback(arrayList); 
     });  

    } 

}; 

调用函数

$("#dropDownList").change(function() 
    { 
     TK.getSectionA(fileName, function(data) 
     { 
      TK.List = data; 
      alert(TK.List); // This works ok... 
     }); 

      alert(TK.List); // This does not work when calling using this property outside the callback.. 
    }); 

我如何能得到这个回调函数是在另一个函数外面工作

+0

第二次警告_cannot_工作。你__有点等待 –

+0

@JanDvorak这就是问题的全部要点 – Popnoodles

+0

@popnoodles你是否建议我发布这个答案? –

回答

1

jQuery的获得()函数返回promise接口,允许您添加尽可能多的函数,以便处理get()成功完成(done())或失败(fail)或完成任一方式(always())。

承诺接口与延迟相同,但只有“只读”方法,因此您不能干涉过程,但可以看到会发生什么。

如果返回的承诺,它可以用来做任何你想要的:

var TK = { 
     List: [], 
     getSectionA: function(listName, callback) 
     { 
      var arrayList = []; 
      return $.get('ajax/test.html', {sendName: listName}, function(data) { 

        $.each(data, function() 
        { 
         arrayList = data; 
        }); 
      callback(arrayList); 
      });  

     } 

}; 

调用它是这样的:

TK.getSectionA(fileName, function(data) 
     { 
      TK.List = data; 
      alert(TK.List); // This works ok... 
     }).always(function() { 
      alert("Get ended: " + TK.List); 
     }); 

您可以http://api.jquery.com/jQuery.ajax/此页面上阅读,但有跳到一个有“承诺”的段落。

+0

这是否意味着我现在可以在代码中的任何位置使用TK.List更新的数组信息?例如,我需要在代码中的其他地方使用TK.List ... –

+0

@YetimworkBeyene只在回调到“always”或“done”;否则你可能会试图快速访问'TK' –

+1

Lee,为什么不直接链接到http://api.jquery.com/category/deferred-object/? –

相关问题