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

时间:2015-12-25 18:55:00

标签: javascript jquery html ajax javascript-objects

所以我有这个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.conn未定义。我只是想知道如何为对象的属性赋值并保留它以备将来使用?谢谢!

2 个答案:

答案 0 :(得分:1)

在ajax成功回调中, IocContainer.ShowWeatherViewModel 指的是与原始对象不同的范围。

将您的代码更改为:

if(x<button.getOriginX()-button.getWidth()*0.5f||x>(button.getOriginX()+button.getWidth()*0.5f)||y<button.getOriginY() - button.getHeight()*0.5f||y>(button.getOriginY()+button.getHeight()*0.5f)){
//do stuff
}

答案 1 :(得分:0)

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

$.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。阅读Understanding Scope and Context in 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");
        }
    });
},