0

使用回调,我有以下代码

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

我怎样才能让它在另一个函数中的回调函数之外工作

4

1 回答 1

1

jQuery get() 函数返回 promise 接口,允许您添加任意数量的函数来处理 get() 成功完成 (done()) 或失败 (fail) 或只是完成任一方式 (always()) .

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

于 2013-01-15T23:24:41.507 回答