2

サーバーに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()ため、失敗することはわかっています。thisSomeObject

それでも、リクエストが完了した後、どうすれば効率的にオブジェクトを参照できますか?私は自分が望むことを達成するために次のことを行うことができると思いましたが、それは適切ではないと感じており、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()コンテキスト)を渡すことができます。thisSomeObject

于 2012-10-26T22:28:22.397 に答える
2

contextのオプションを使用できます$.ajax。具体的には、を使用すると、内部の値が現在の値context: thisに設定されます。これは、必要な値です。thisparseSuccessthis

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