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 中,请帮我解决,谢谢。

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

有关更多信息,请参阅:上下文

类型:PlainObject

该对象将成为所有与 Ajax 相关的回调的上下文。默认情况下,上下文是一个对象,表示调用中使用的 ajax 设置($.ajaxSettings 与传递给 $.ajax 的设置合并)。例如,将 DOM 元素指定为上下文将使它成为请求完整回调的上下文,如下所示:

于 2013-09-15T00:41:11.627 回答
0

$(this)您引用的是实例success。看看下面的代码。

$('.act').live('click', function() {
var $this = $(this);

然后在你的成功回调中,使用这个

$this.closest('tr').addClass('danger');

注意:不推荐使用.live()。改为使用.on()

以下是如何使用 .on()

于 2013-09-15T00:47:43.433 回答
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 回答