在这种情况下,jquery如何推迟工作?

时间:2013-01-15 23:11:20

标签: 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..
   });  

如何在另一个函数

中的回调函数之外使其工作

1 个答案:

答案 0 :(得分:1)

jQuery get()函数返回promise接口,允许你添加任意数量的函数来处理get()完成成功(done())或失败(失败)或只是完成任何一种方式(总是())。

promise接口与deferred相同,但只有“只读”方法,所以你不能干扰过程,但你可以看到会发生什么。

如果您退回承诺,它可用于做您想做的任何事情:

    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/上阅读,但必须跳到其中包含“承诺”的段落。