0

Ajax から返された Json データに基づいてグリッドを構築する新しい機能を作成しています。この機能を関数内にカプセル化することにしたので、追加/更新/削除すると、データの新しい表現を正常に取得できます。

私が抱えている問題は、グローバル配列を埋めたいのですが、AJAX を使用する関数が終了すると、配列はあるがデータがないことです。すべてのコードが AJAX 呼び出し内にある場合、これは問題ではありませんが、これを独自の関数に分離しようとすると、意図したとおりに機能しません。

 <script type="text/javascript">
    var DataArray = [];

    // Use this function to fill array
    function retrieveNotes() {
        $.ajax({
            url: "http://wks52025:82/WcfDataService.svc/GetNotesFromView()?$format=json",
            type: "get",
            datatype: "json",
            asynch:true,
            success: function (data) {
                returnedData = data;
                $.each(data.d, function (i, item) {
                    DataArray[i] = [];
                    DataArray[i][0] = item.NotesTitle.trim();
                    DataArray[i][1] = item.ProfileName.trim();
                    DataArray[i][2] = item.IsShared;
                    DataArray[i][3] = item.NameOfUser.trim();
                }) // End of each loop
            }
        });
    }


    $(document).ready(function () {
        retrieveNotes();
        DataArray;
    </script>
4

1 に答える 1

5

これは非同期であるため、データを使用する前に ajax 呼び出しが完了するまで待つ必要があります。

function retrieveNotes() {
    return $.ajax({
        url: "http://wks52025:82/WcfDataService.svc/GetNotesFromView()?$format=json",
        type: "get",
        datatype: "json"
    });
}

$(document).ready(function () {
    retrieveNotes().done(function(data) {
        var DataArray = [];
        $.each(data.d, function (i, item) {
            DataArray[i] = [];
            DataArray[i][0] = item.NotesTitle.trim();
            DataArray[i][1] = item.ProfileName.trim();
            DataArray[i][2] = item.IsShared;
            DataArray[i][3] = item.NameOfUser.trim();
        });
        // you can only use the data inside the done() handler,
        // when the call has completed and the data is returned
    });
});
于 2013-05-15T11:41:42.613 に答える