很抱歉重复,但我可以在其他帖子中找到任何解决方案。
我尝试使用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}
答案 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);
}
});
};