Javascript 从$ajax.success调用时未定义方法
当我从$ajax.success回调调用一个方法时,我得到一个未定义的Javascript 从$ajax.success调用时未定义方法,javascript,jquery,ajax,Javascript,Jquery,Ajax,当我从$ajax.success回调调用一个方法时,我得到一个未定义的 var someObj = {}; someObj.someMethod = function() { //code code } someObj.ajaxCall = function() { $.ajax({ //ajax options }) .done(function( data ) { this.someMethod();
var someObj = {};
someObj.someMethod = function() {
//code code
}
someObj.ajaxCall = function() {
$.ajax({
//ajax options
})
.done(function( data ) {
this.someMethod();
});
}
您应该使用函数对象的调用方法:
someObj.ajaxCall = function() {
$.ajax({
//ajax options
})
.done(function( data ) {
someMethod.call(someObj);
});
}
在成功回调中,this对象指向未定义someMethod函数的$ajax对象。正如我们的好朋友SLaks先生所指出的,关于
this
除了发布的解决方案之外,还有一个解决方案可能在回调之前保存对作用域的引用:
someObj.ajaxCall = function() {
var _this = this;
$.ajax({
//ajax options
})
.done(function( data ) {
_this.someMethod();
});
}
或者,您可以将上下文选项与$.ajax()
一起使用,以控制此
值的设置:
someObj.ajaxCall = function() {
$.ajax({
context: this,
// other ajax options
})
.done(function( data ) {
this.someMethod();
});
}
这个
并不是你想象的那样。如果它只适用于特定的对象类型,那么让somemethod
成为全局的并不理想——如果他不能将someObj
用于函数,那么它将击败面向对象编程。这似乎也不起作用(如果somemethod
是一个对象的方法)或者让它全球化是个坏主意。这不是一个好的解决方案,比目前公认的答案要好得多。还可以将上下文
选项与$.ajax()
一起使用,使成为您想要的样子。