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

时间:2014-09-07 22:07:03

标签: javascript jquery ajax

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

var someObj = {};
someObj.someMethod = function() {
    //code code
}

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

2 个答案:

答案 0 :(得分:3)

作为我们的好朋友,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();
    });
}

答案 1 :(得分:-1)

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

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

在成功回调中,this对象指向没有定义someMethod函数的$ ajax对象。