对象内部的回调
Callbacks inside an object
为什么这行不通
我在一个对象中通过 jquery 有一个 ajax 函数,出于某种原因它是
在回调函数中没有看到对象中的其他函数。
function object () {
this.test = function () { alert ("test") }
this.makeQuery = function() {
$.ajax( {
url: stuff,
dataType: "xml",
success: function (data) { makeData(data) } } )
}
this.makeData = function (data) {
this.test(); // Error "this.test() is not a function"
}
}
原因是回调函数的调用方式不同"this"。在 jQuery.ajax 调用的情况下,"this" 函数是 jqXHR 对象 http://api.jquery.com/Types/#jqXHR。因此,如果您想将 "this" 对象传递到回调中,您必须在作用域中捕获它并引用捕获的变量。像这样(如果我修复了你所有的语法错误):
function myFunction() {
var that = this;
this.test = function () { alert ("test") };
this.makeQuery = function() {
jQuery.ajax({
type: 'post',
url: 'someUrl',
dataType: 'json',
success: function (data, textStatus, jqXHR) {
that.makeData(data);
},
error: function (jqXHR, textStatus, textError) {
}
});
};
this.makeData = function(data) {
this.data = data
this.test(); // Error "this.test() is not a function"
};
}
var m = new myFunction();
m.makeQuery();
为什么这行不通
我在一个对象中通过 jquery 有一个 ajax 函数,出于某种原因它是 在回调函数中没有看到对象中的其他函数。
function object () {
this.test = function () { alert ("test") }
this.makeQuery = function() {
$.ajax( {
url: stuff,
dataType: "xml",
success: function (data) { makeData(data) } } )
}
this.makeData = function (data) {
this.test(); // Error "this.test() is not a function"
}
}
原因是回调函数的调用方式不同"this"。在 jQuery.ajax 调用的情况下,"this" 函数是 jqXHR 对象 http://api.jquery.com/Types/#jqXHR。因此,如果您想将 "this" 对象传递到回调中,您必须在作用域中捕获它并引用捕获的变量。像这样(如果我修复了你所有的语法错误):
function myFunction() {
var that = this;
this.test = function () { alert ("test") };
this.makeQuery = function() {
jQuery.ajax({
type: 'post',
url: 'someUrl',
dataType: 'json',
success: function (data, textStatus, jqXHR) {
that.makeData(data);
},
error: function (jqXHR, textStatus, textError) {
}
});
};
this.makeData = function(data) {
this.data = data
this.test(); // Error "this.test() is not a function"
};
}
var m = new myFunction();
m.makeQuery();