0

私は次のJavascript関数を持っています:

function GetUniversity()
{       
    $.getJSON(AddressAccess+"Home/university/format/json",
        function(data) 
        { 
            data = data[0];
            return data;
        }); 
}

関数でデータをテストすると、データ変数には間違いなくURLから返されたデータがあります。これが、この関数を呼び出す場所のコードです。

$(document).on('pagebeforeshow','#searchpage',
                    function()
                    {
                        var UniveristyDat = null;
                        UniveristyData = GetUniversity();
                        alert(UniveristyData.Name);
                        var out = '';
                        for(i in UniveristyData)
                        {
                            out+= i + ' ' + UniveristyData[i] + "\n";
                        }
                        alert(out);

                    }
              );  

理論的には、UniveristyData var には contense が返されるはずですが、何らかの理由で null が返されます。ここで何が起こっているのかわかりません。

4

1 に答える 1

1

への呼び出し$.getJSON()は非同期です。渡された関数は、リクエストが終了したときに実行されます。ただし、残りのコードはすぐに評価されます。したがって、GetUniversity()関数は戻り値を生成しません。使用できます。

これを解決するには、次の 2 つのオプションがあります。

  1. (悪い)$.ajax代わりに使用async: falseし、オプションで設定します。これにより、リクエストが完了するまで JavaScript の実行が保留されます。ただし、その間はページ全体が使用できなくなるので注意してください。
  2. (より良い) すべての依存機能を のコールバックに渡します$.getJSON。リクエストが終了すると実行され、残りのコード/ページはその間問題なく動作します。

 

function GetUniversity()
{       
    $.getJSON(AddressAccess+"Home/university/format/json",
        function(data) 
        { 
            var UniveristyData = data[0];
            alert(UniveristyData.Name);
            var out = '';
            for(i in UniveristyData) {
              out+= i + ' ' + UniveristyData[i] + "\n";
            }
            alert(out);
        }); 
}

$(document).on('pagebeforeshow','#searchpage', GetUniversity );
于 2013-02-02T13:10:13.317 に答える