0

読み込まれるとすぐに API エンドポイントを呼び出して、ユーザーが認証されているかどうかを確認するクライアント Web アプリがあります。そうでない場合は、ログイン内容が表示されます。ユーザーが認証されると、他の情報が表示されます。

この情報が返されるまで、何も表示したくありません。私の最初のアプローチは、同期呼び出しを使用することでしたが、これは正しいようです。しかし、この質問への回答に基づいて、それは間違ったアプローチのようです:

同期 JSON クロスドメイン?

その場合、非同期処理を実行してから、データが返されるまで停止する必要があります。

次のような activate() 関数で呼び出しを行うためにノックアウトを使用しています。

var activate = function () {
    // get auth data
    authPayload(dataservice.getAuthPayload());
    if (!authPayload().isAuthenticated) {
        // do stuff
    } else if (authPayload().isAuthenticated === true){
        // do other stuff
    }

getAuthPayload を使用:

 var getAuthPayload = function () {
        var options = {
            async: false,
            url: apiEndpoint + 'api/authpayload',
            type: 'GET',
            dataType: 'json'
        };
        return $.ajax(options)
            .then(querySucceeded)
            .fail(queryFailed);
};

ただし、現在これは同期的に実行されているため、activate関数はサーバーから返されるのを待たないため、応答のデータを認識しません。アプリは現在、activate関数が閉じるまでスピナーを表示しています。への電話を待つにはどうすればよいdataservice.getAuthPayload()ですか?

4

1 に答える 1

0

.done問題は、関数を使用する代わりに $.ajax をすぐに返すことだと思います。これは私にとってはうまくいきます:

    var go = $.ajax({
        type: 'POST',
        data: {fof: 'bar'}
    })
    .done(function(results) {
        // Code here won't execute until response received from AJAX
    })
    .fail(function(msg) {
        console.debug('Error:');
        console.debug(msg);
    })
    .always(function() {
    });
于 2013-07-02T23:37:23.733 に答える