0

私はwindows8アプリを構築しようとしていますが、基本としてSplitAppを使用しています。AJAXからデータを追加しようとしただけですが、失敗します。

data.jsファイルには次のものがあります。

(function () {

    var list = new WinJS.Binding.List();

    $.each(data(), function (key, item) {
        list.push(item);
    }); 

}
})();

私が持っているファイルapp.jsに(これは機能し、アプリのリストに入力されます)

function data() {

   var testGroupMeeting = [];
   var testMeeting = [];

   testGroupMeeting.push(new Group({ id: "1", title: "Group1" }));

   testMeeting.push(new Meeting({ group: testGroupMeeting[0], title: "Item Title: 1"       }));

   return testMeeting;


}

しかし、AJAXを使用してデータを取得し、データが入力されたときにtestMeetingを返したい場合、クラッシュします。

app.jsファイルに(動作しません)がありますが、これを動作させる必要があります

function data() {

   var testGroupMeeting = [];
   var testMeeting = [];

$.ajax({
    url: "/json/json.php",
    dataType: 'json',
    contentType: 'text/json',
    type: 'GET',
    success: function (data) {

           //Data here is correct and mapped to the arrays, its the same as in the abow example, i have the same data in the arrays as in the above example



        }
        return testMeeting;
    }

});


}

しかし、問題は、AJAXが何も返さないことになっていることのようです。ご覧のとおり、その関数は匿名であるため、data.jsへのコールバックを行うことはできません。

これをどのように行いますか?

4

1 に答える 1

0

$.ajax 関数は非同期であるため、この方法では機能しません。ajax 呼び出しを実行し、その後、適切なデータを使用して「成功」関数を呼び出します。

$.each(data() ... を書き直して、 data() を呼び出して testMeeting が返されることを期待する代わりに、 data を呼び出して testMetting オブジェクトでコールバックを呼び出すことを期待するようにします。

何かのようなもの :

(function () {

    var list = new WinJS.Binding.List();

    getData(function (theMetting) {


        $.each(theMeeting, function (key, item) {
          list.push(item);
        }); 

 }
})();


// callback is a function that will be called with 
// something that is built from the server, after the ajax
// request is done
function getData(callback) {


 $.ajax({
    // ... everything you did ... 
    success: function (data) {

       // ... use the data to build the meeting object
       // and pass it to the callback
       callback(meeting)


    }
    return testMeeting;
}

});

}

同期コード (関数を返す) と非同期呼び出し (いくつかの作業を行い、後で結果でコールバックを呼び出す) には根本的な違いがあります。$.ajax は典型的な非同期関数です。

理論的には「async」フラグを ajax に渡して、Ajax 呼び出しが完了する前に $.ajax 関数が戻らないようにすることもできますが、UI がブロックされるため、おそらくそうしたくないでしょう。

これが役立つことを願っています。

于 2013-02-22T14:47:49.923 に答える