在使用jquery回调时,我发现'this'不再定义了。我找到了一个解决方法,即将'this'设置为另一个变量。例如,像这样:
function handler(DATA) {
var myThis = this;
$.post(
'file.php',
DATA,
function() {
// THIS where I need access to 'this', but its not available
// unless I've used the 'myThis' trick above
}
);
}
它是这样的,但我一直在寻找“正确的方式”或“更好的方式”来做事。
这是最好的方法吗?或者还有另一个吗?
答案 0 :(得分:5)
这很好。我一直在我的项目中这样做,特别是使用Ajax调用。
但是,请务必将var
放在myThis
之前,否则它将在全局范围内声明,您绝对不需要。
function handler(DATA) {
var myThis = this;
$.post(
'file.php',
DATA,
function() {
// THIS where I need access to 'this', but its not available
// unless I've used the 'myThis' trick above
}
);
}
答案 1 :(得分:1)
我喜欢使用“自我”:
function handler(DATA) {
var self = this;
$.ajax({
"url":"file.php",
"type":"post",
"data":DATA,
"success":function() {
// THIS where I need access to 'this', but its not available
// unless I've used the 'myThis' trick above
},
"error":function(){
alert("ERROR!")
}
});
}
你也可以使用jQuery的代理方法......但是对于这种情况可能会有点过分。
function handler(DATA) {
var success = $.proxy(function(){
// use "this" in this function to refer to the scope
// you were assigning to "myThis" in your example
}, this);
$.ajax({
"url":"file.php",
"type":"post",
"data":DATA,
"success":success,
"error":function(){}
});
}