从$ajax.success调用方法时未定义

Method undefined when calling it from $ajax.success

本文关键字:方法 未定义 调用 success ajax      更新时间:2023-09-26

当我从$ajax.success回调调用一个方法时,我得到一个未定义的。

var someObj = {};
someObj.someMethod = function() {
    //code code
}
someObj.ajaxCall = function() {
    $.ajax({
        //ajax options
    })
        .done(function( data ) {
            this.someMethod();
    });
}

正如我们的好朋友SLaks先生所指出的,您在this 方面存在范围问题

除了发布的解决方案之外,还有一个解决方案可以在回调之前保存对作用域的引用:

someObj.ajaxCall = function() {
    var _this = this;
    $.ajax({
        //ajax options
    })
        .done(function( data ) {
            _this.someMethod();
    });
}

或者,您可以使用$.ajax()的上下文选项来控制this值的设置:

someObj.ajaxCall = function() {
    $.ajax({
        context: this,
        // other ajax options
    })
        .done(function( data ) {
            this.someMethod();
    });
}

您应该使用函数对象的调用方法:

someObj.ajaxCall = function() {
    $.ajax({
        //ajax options
    })
        .done(function( data ) {
            someMethod.call(someObj);
    });
}

在success回调中,this对象指向未定义someMethod函数的$ajax对象。