【发布时间】:2012-07-07 20:24:17
【问题描述】:
我正在尝试开始使用 google 钱包并通过 ajax 请求生成 jwt 令牌。
当用户点击购买按钮时,它会触发 purchase() 函数,然后使用 get_jwt_token_for_user() 函数发送一些数据以获取 jwt。我已将 ajax 请求设置为非异步,以确保将 jwt 发送到谷歌支付处理程序。
但是,在 get_jwt_token_for_user() 函数返回 jwt 之前,purchase() 函数似乎会继续。日志输出显示数字 1 和 2 在 jwt 从 get_jwt_token_for_user() 函数打印到控制台之前打印到控制台。
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
});
}
}
知道在没有 jwt 值的情况下,我可以做些什么来确保 ajax 请求在 purchase() 函数继续前返回数据吗?
【问题讨论】:
-
不确定这是否会解决异步问题,但您的 return 语句在成功处理程序中不会有任何好处。我认为在 $.ajax() 调用完成后你想要它,所以把它放在后面。否则,您的 get_jwt_token_for_user() 函数将始终返回 null。
-
重构你的代码,让你想要执行的代码进入回调;)
-
有点困惑 - 从我所见,您发布的代码中实际上没有调用
purchase函数,即没有调用它。
标签: javascript ajax jquery