javascript类属性未设置为ajax调用的成功函数

时间:2016-03-11 12:41:18

标签: javascript jquery ajax object asynchronous

很抱歉重复,但我可以在其他帖子中找到任何解决方案。

我尝试使用ajax调用webservice来填充javascript对象。我不理解这个的逻辑以及为什么我的对象在调用之后没有设置。我写了这个小例子来解释我的问题:

代码:

function Cellule(){
    this.test = 0;
    this.textfunction();
}

Cellule.prototype.textfunction = function(){
    this.test = 1;
    $.ajax({
        type: "GET",
        url: "BASEURL/cellules", 
        data: "",
        success: function(msg){
            console.log("success");
            this.test = 2;
            console.log(cellule);
        }
    });
};

var cellule = new Cellule();

控制台输出:

success
Cellule {test: 1}

3 个答案:

答案 0 :(得分:8)

  

this未提及cellule

ajax设置

的参数中使用.bind()context

bind()方法创建一个新函数,在调用时,将其this关键字设置为提供的值

或指定context: this将在成功处理程序中使用cellule的上下文。

试试这个:

function Cellule() {
  this.test = 0;
  this.textfunction();
}

Cellule.prototype.textfunction = function() {
  this.test = 1;
  $.ajax({
    type: "GET",
    url: "../slimrest/andon/cellules",
    data: "",
    success: function(msg) {
      console.log("success");
      this.test = 2;
      console.log(cellule);
    }.bind(this)
  });
};

var cellule = new Cellule();

答案 1 :(得分:1)

由于使用ajax调用时update products p set p.productcode = trim(p.productcode); 已更改,因此导致您的问题。

将此范围绑定到调用应解决您的问题。

this-scope

答案 2 :(得分:1)

您的AJAX成功句柄中的this是指AJAX调用,而不是您的对象。试试这个:

Cellule.prototype.textfunction = function(){
    this.test = 1;
    var _this = this;
    $.ajax({
        type: "GET",
        url: "BASEURL/cellules", 
        data: "",
        success: function(msg){
            console.log("success");
            _this.test = 2;
            console.log(cellule);
        }
    });
};