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()関数は、get()を正常に完了する(done())または失敗する(fail)、またはいずれかの方法で完了する(always())を処理するために必要な数の関数を追加できるpromiseインターフェイスを返します。 。

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 に答える