Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从$ajax.success调用时未定义方法_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 从$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();

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

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()
一起使用,使
成为您想要的样子。