2

在向服务器发送 Ajax 请求,然后在 JavaScript 对象中的成功函数上返回数据时,我遇到了一个有点烦人的问题。我搜索了类似的问题,但没有一个与我的方式相同。

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

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
        }
    } );
};

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

4

2 回答 2

4

你总是可以这样做:

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

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

于 2012-10-26T22:28:22.397 回答
2

您可以使用 的context选项$.ajax。具体来说, usingcontext: this会将this里面的值设置parseSuccess为当前this值,这就是你想要的。

$.ajax({
  // ...
  context: this,
  success: this.parseSuccess
});
于 2012-10-27T11:33:43.107 回答