【发布时间】:2013-09-19 18:35:02
【问题描述】:
我创建了一个 JavaScript 对象,我正在尝试执行 jQuery AJAX 请求并根据响应在对象中设置一个变量,但它不起作用。变量返回空。这是代码...
$(document).ready(function() {
var DoStuff = {
clientToken : null,
userToken: null,
init : function() {
this.getUserToken();
},
setClientToken : function(token) {
this.clientToken = token;
this.init();
},
getUserToken : function() {
$this = this;
var request = $.ajax({
url: "/api/user/current_user/",
type: "POST",
data: { clientToken : this.clientToken },
dataType: "json"
});
request.done(function(response) {
if(response.userToken) {
/* this should be setting the DoStuff.userToken variable */
$this.userToken = response.userToken;
}else {
$this.userToken = "didn't work :(";
}
});
},
setUserToken : function(token) {
this.userToken = token;
},
showUserToken : function() {
alert(this.userToken);
}
};
//-> Set the client all requests will be sent on behalf of
DoStuff.setClientToken("clienttokenherewooo");
DoStuff.showUserToken(); // this should show the value the AJAX returned, but it's empty
});
【问题讨论】:
-
你需要返回你传递的对象
-
也许您的 AJAX 请求在您点击 showUserToken() 时尚未完成。当您尝试稍后运行该行时会发生什么?
-
记住,AJAX 是异步的! JavaScript 确实不在继续之前等待调用完成。它继续让 AJAX 在后台运行。当您拨打
showUserToken时,呼叫尚未完成,令牌尚未下载。您需要为此使用回调。你需要在request.done函数中调用DoStuff.showUserToken();。
标签: javascript variables object