我有下面的代码来在 javascript 中创建一个类......现在我只会传递“网站”的 ID,然后通过 ajax 调用我将从数据库中获取其余信息(JSON ENCODED )。
现在我唯一的问题是,当我看到对象最后的内容时,它只显示 ID。
ajax 调用工作正常,因为如果我在成功(ajax)后提醒 this.address 它会显示结果。
我认为我无法使用 ajax 请求设置属性...你能帮忙吗?
function website(id) {
this.id = id; //id
$.ajax({ //website_information
type: "GET",
url: '/proc.php?proc=website_name&id=' + this.id + '',
success: function(data){
var tmp = $.parseJSON(data);
this.address = tmp.website_address;
this.name = tmp.website_name;
}
});
}
var obj = new website('20');
obj.alertwebsite();
console.log(obj);
最佳答案
这里有两个问题。首先是 $.ajax
是异步的。这意味着它会在请求完成之前返回。 success
函数在请求完成时运行,但 obj.alertwebsite()
将在请求完成之前运行。
第二个问题是 AJAX 回调中 this
的值。在回调中,this
设置为包含 AJAX 调用的所有设置的对象。这意味着您正在此对象上设置 address
和 name
属性。有两种方法可以解决这个问题。第一个是 that = this
就像其他答案一样。更好的方法是在 AJAX 调用中使用 context
设置:
function website(id) {
this.id = id; //id
$.ajax({ //website_information
type: "GET",
url: '/proc.php?proc=website_name&id=' + this.id + '',
context: this,
success: function (data) {
var tmp = $.parseJSON(data);
this.address = tmp.website_address;
this.name = tmp.website_name;
}
});
}
这允许您自定义回调中this
的含义。这记录在the jQuery AJAX documentation中.
关于Javascript 类 - 无法设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10497749/