【问题标题】:Javascript Object and jQuery AJAX [duplicate]Javascript 对象和 jQuery AJAX [重复]
【发布时间】: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


【解决方案1】:

AJAX 是异步的。在函数 getUserToken 返回 ajax 对象并执行类似的操作:

DoStuff.getUserToken().done(function(result) {
    // blablabla
}).fail(function(result) {
    // error blablabla
});

【讨论】:

    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 2012-09-04
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多