1

私はクロージャーを使用して ajax の成功内で this を _this に設定しましたが、もちろん「応答」を失いました。このインスタンスで応答データを取得する方法を知っている人はいますか?

var form = {       
    name: 'great form',    
    load:function() {
        $.ajax({
        url: "get/data",
        type: "POST",
        success: function(_this){
                console.log(_this.name);     // outputs : "great form"
                console.log(response.data);  // response is undefined
        }(this)
    });
};
4

2 に答える 2

2

引数を成功ハンドラーに変更したくありません。成功ハンドラーへの最初の引数は ajax 応答データであるため、そのように扱う必要があります。

成功ハンドラーでポインターにアクセスするにthisは、いくつかの方法があります。this私が最もエレガントだと思うのは、jQuery を使用すると、成功コールバックで設定したいコンテキストを、次のように$.ajax()関数の引数の 1 つとして渡すことができることです。

var form = {       
    name: 'great form',    
    load:function() {
        $.ajax({
        context: this,      // sets 'this' pointer for success callback
        url: "get/data",
        type: "POST",
        success: function(response){
                console.log(this.name);      // outputs : "great form"
                console.log(response.data);  // ajax response data
        });
    });
};
于 2013-10-25T17:52:25.017 に答える
1

_this成功関数の引数として使用したくない場合 (そして、 jQuery が成功時に関数を呼び出すのを待たずに、すぐに関数を呼び出すajax方法をとっていた場合)、呼び出しの横に変数として作成します。

var form = {       
    name: 'great form',    
    load:function() {
        var _this = this; // <=== Here
        $.ajax({
        url: "get/data",
        type: "POST",
        success: function(response){
                console.log(_this.name);     // outputs : "great form"
                console.log(response.data);  // response is undefined
        }
    });
};

もちろん、このコードでは を使用できform.nameます。これは 1 回限りのオブジェクトだからです。

もっと:

于 2013-10-25T17:08:24.827 に答える