JavaScript / jQuery:在成功时使用'this'对象

时间:2012-10-26 22:26:40

标签: javascript jquery ajax

在向服务器发送Ajax请求,然后在JavaScript对象中返回success函数的数据时,我有点烦人的问题。我搜索过类似的问题,但没有一个像我的一样。

例如,我有以下代码在对象中发送请求:

function SomeObject ( someVar )
{
    var someVar = someVar;
}

SomeObject.prototype.sendRequest = function ()
{
    $.ajax(
    {
        url  : "somePage.php",
        type : "POST",
        data :
        {
            someVar : someVar
        },
        success : this.parseSuccess
    } );
};

SomeObject.prototype.parseSuccess = function ( data )
{
    if ( data === "success" )
    {
        this.proceed();  // Error
    }
    else
    {
        alert( "Server failed request." );
        this.proceed();
    }
};

SomeObject.prototype.proceed = function ()
{
    // Do something else
};

我知道this.proceed()会失败,因为this不是SomeObject个实例。

但是,如何在请求完成后有效地返回对象? 我发现我可以执行以下操作来实现我想要的功能,但感觉不合适,我希望有更好的方法来处理Ajax调用:

SomeObject.prototype.sendRequest = function ()
{
    var me = this;

    $.ajax(
    {
        url  : "somePage.php",
        type : "POST",
        data :
        {
            someVar : someVar
        },
        success : function ( data )
        {
            me.parseSuccess( data );  // Will work
        }
    } );
};

感谢您对此事的任何帮助。

2 个答案:

答案 0 :(得分:4)

您可以随时执行此操作:

success : function ( data )
    {
        parseSuccess.apply(this, [data]); // or parseSuccess.call(this, data);
    }

基本上,使用apply(),您可以传入要在函数内使用的this的上下文,在本例中是SomeObject上下文。

答案 1 :(得分:1)

您可以使用context的{​​{1}}选项。具体来说,使用$.ajax会将context: this内的this值设置为当前parseSuccess值,这就是您想要的。

this