通过AJAX分配和使用javascript对象属性

Assign and use javascript object property via AJAX

本文关键字:javascript 对象 属性 AJAX 分配 通过      更新时间:2023-09-26

所以我有这个Javascript对象:

var obj = { 
    conn : null,
    first : function(thisIdentity) {
        "use strict";
        $(document).on('click', thisIdentity, function(e) {
        e.preventDefault();
        $.ajax ({ 
            url : some value,
            // other parameters
            success : function() {
                this.conn = new Connection(data.user_id, "127.0.0.1:80");
            }
        });
   },
    second : function(thisIdentity) {
        "use strict";
        $(document).on('click', thisIdentity, function(e) {
            e.preventDefault();
            $.ajax ({ 
                url : some value,
                // other parameters
                success : function() { 
                    // using this.conn now results in UNDEFINED
                }
            });
    }
};

现在,在第一个函数的AJAX调用中,值基本上被分配给了conn变量,但当我试图在第二个函数中使用相同的值时,它会声明this.con未定义。我只想知道如何为对象的属性赋值,并保留它以备将来使用?谢谢

在ajax成功回调中,this引用的范围与原始对象不同。

将您的代码更改为:

var obj = { 
conn : null,
first : function(thisIdentity) {
    "use strict";
    var mySelf = this;
    $(document).on('click', thisIdentity, function(e) {
    e.preventDefault();
    $.ajax ({ 
        url : some value,
        // other parameters
        success : function() {
            mySelf.conn = new Connection(data.user_id, "127.0.0.1:80");
        }
    });
},
second : function(thisIdentity) {
    "use strict";
    var mySelf = this;
    $(document).on('click', thisIdentity, function(e) {
        e.preventDefault();
        $.ajax ({ 
            url : some value,
            // other parameters
            success : function() { 
                // now you can access the connection with mySelf.conn
            }
        });
    }
};

语法本身是错误的。您正在创建一个变量或在对象文字中给出一个表达式。记住,这不是一个函数,但它应该是:

$.ajax ({ 
    // computation and in success function 
    conn: new Connection(data.user_id, "127.0.0.1:80")
});

更新

当你给出这样一种定义方式时:

success : function() {
    this.conn = new Connection(data.user_id, "127.0.0.1:80");
}

这里,this对象指的是success函数,而不是您的object。阅读理解JavaScript中的作用域和上下文。现在您需要为this创建一个代理变量并使用它:

first : function(thisIdentity) {
    "use strict";
    var myObj = this;
    $(document).on('click', thisIdentity, function(e) {
    e.preventDefault();
    $.ajax ({ 
        url : some value,
        // other parameters
        success : function() {
            myObj.conn = new Connection(data.user_id, "127.0.0.1:80");
        }
    });
},