4

Google ウォレットの使用を開始しようとしており、ajax リクエストを介して jwt トークンを生成しています。

ユーザーが購入ボタンを押すと、 purchase() 関数が起動され、 get_jwt_token_for_user() 関数を使用して jwt を取得するためのデータが送信されます。jwtがGoogle Paymentsハンドラに確実に送信されるように、ajaxリクエストを非同期にしないように設定しました。

ただし、get_jwt_token_for_user() 関数によって jwt が返される前に、 purchase() 関数が継続しているようです。ログ出力は、jwt が get_jwt_token_for_user() 関数からコンソールに出力される前に、番号 1 と 2 がコンソールに出力されることを示しています。

function get_jwt_token_for_user(the_key)
{
    var JwtTokenURL = "/get_jwt_token";
    var the_user_name = $('#user_name').val();
    var the_user_email = $('#user_email').val();
    var the_user_number = $('#user_number').val();
    $.ajax({ 
        type: "Get",
        url: JwtTokenURL,
        data: {user_number : the_user_number, user_name : the_user_name, user_email : the_user_email, the_d_key : the_key},
        async: false,
        success: function(result) {
            var myObject = JSON.parse(result);
            console.log(myObject.jwt_token);
            return myObject.jwt_token
        },
        failure: function(fail){ alert(fail); }
     });
}

function purchase(the_key)
{
    console.log("1");
    var jwt_token = get_jwt_token_for_user(the_key);
    console.log("2");
    if (jwt_token !== "")
    {
        console.log(jwt_token);
        goog.payments.inapp.buy({
            parameters: {},
            'jwt'     : jwt_token,
            'success' : successHandler,
            'failure' : failureHandler
          });
    }
}

purchase() 関数が jwt 値なしで行進する前に、ajax リクエストがデータを返すようにするために何ができるか考えていますか?

4

1 に答える 1

5

関数は何も返しませget_jwt_token_for_userん。次のようなものが必要です。

function get_jwt_token_for_user(the_key) {
    //...
    var myObject;
    $.ajax({ 
        //...
        success: function(result) {
            myObject = JSON.parse(result);
        },
        //...
     });
     return myObject ? myObject.jwt_token : '';
}

コールバックから何かを返すと、successその値が返されることはなく$.ajax、JavaScript関数は最後の式の値を返しません。関数に何かを返す場合は、明示を含める必要があります。return

async:falseまた、できるだけ早く使用を停止する必要があります。これはかなりユーザーに敵対的であり、なくなります。コードは次のようになります。

function get_jwt_token_for_user(the_key, callback) {
    //...
    $.ajax({ 
        type: "Get",
        url: JwtTokenURL,
        data: {user_number : the_user_number, user_name : the_user_name, user_email : the_user_email, the_d_key : the_key},
        success: function(result) {
            var myObject = JSON.parse(result);
            callback(myObject.jwt_token);
        },
        failure: function(fail){ alert(fail); }
     });
}

function purchase(the_key) {
    get_jwt_token_for_user(the_key, function(jwt_token) {
        if (jwt_token !== "") {
            //...
        }
    });
}
于 2012-07-07T20:10:29.080 に答える