0

次のAJAXリクエストを使用しています...

    $('.act').live('click', function(){     

$.ajax({
        type: "POST",
        async : false,
        url: req_url,
        data : {
            id : account_id
        },
        success : function(data) {
            if(data == 'banned'){
                $(this).closest('tr').addClass('danger');
                alert('updated');
            }
            else{
                alert(data);
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            alert(XMLHttpRequest + " : " + textStatus + " : " + errorThrown);
        }
        }); 

});

しかし、それは tr on の成功に危険クラスを追加するものではありません。解決するのを手伝ってください、ありがとう。

4

5 に答える 5

2

デフォルトでは、コールバックのコンテキストは、呼び出しで使用される ajax 設定を表すオブジェクトになります。

別のコンテキストが必要な場合は、次のようにすることができます。

$('.act').live('click', function(){     
    $.ajax({
        type: "POST",
        async : false,
        url: req_url,
        context: this,  // <=== Pass context here
        data : {
            id : account_id
        },
        success : function(data) {
            if(data == 'banned'){
                $(this).closest('tr').addClass('danger');
                alert('updated');
            }
            else{
                alert(data);
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            alert(XMLHttpRequest + " : " + textStatus + " : " + errorThrown);
        }
    }); 
});

詳細については、コンテキストを参照してください。

タイプ: プレーンオブジェクト

このオブジェクトは、すべての Ajax 関連のコールバックのコンテキストになります。デフォルトでは、コンテキストは呼び出しで使用される ajax 設定を表すオブジェクトです ($.ajaxSettings は $.ajax に渡される設定とマージされます)。たとえば、コンテキストとして DOM 要素を指定すると、次のように、リクエストの完全なコールバックのコンテキストになります。

于 2013-09-15T00:41:11.627 に答える
0

$(this)そのコンテキストではjqxhrオブジェクトを参照するため、別の方法で要素を参照する必要があります。

//編集

.liveは現在非推奨であり、新しいコードでは使用しないでください。

$(document).on('click', '.act', function(){ 
    var self = $(this);
    $.ajax({
        type: "POST",
        async : false,
        url: req_url,
        data : {
            id : account_id
        },
        success : function(data) {
            if(data == 'banned'){
                self.closest('tr').addClass('danger');
                alert('updated');
            } else{
                alert(data);
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            alert(XMLHttpRequest + " : " + textStatus + " : " + errorThrown);
        }
    }); 
});
于 2013-09-15T00:36:28.470 に答える
0

thisコールバック関数の内部は、ajax 呼び出しが行われたときに外部を参照していたのと同じオブジェクトを参照しません。

ここでの解決策は、正しい参照を保持するクロージャー変数を使用し、それをコールバック メソッド内で使用することです。

$('.act').live('click', function () {
    var self = this;
    $.ajax({
        type: "POST",
        async: false,
        url: req_url,
        data: {
            id: account_id
        },
        success: function (data) {
            if (data == 'banned') {
                self.closest('tr').addClass('danger');
                alert('updated');
            } else {
                alert(data);
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(XMLHttpRequest + " : " + textStatus + " : " + errorThrown);
        }
    });
});
于 2013-09-15T00:37:09.873 に答える
0
$(body).on('click', '.act', function() {  
    var myRow = $(this).closest('tr').find('td'); // you have to identify the row up here!   
    $.ajax({
        type: "POST",
        async : false,
        url: req_url,
        data : {
            id : account_id
        },
        success : function(data) {
            if(data == 'banned'){
                myRow.addClass('danger'); // but you can still use it here
                alert('updated');
            }
            else
            {
                alert(data);
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            alert(XMLHttpRequest + " : " + textStatus + " : " + errorThrown);
        }
    }); 
});
于 2013-09-15T00:40:48.343 に答える