4

想象一下:

$('#blah').on('click', function(){
    var cat_id = $(this).attr('id');
    $.ajax({
        // stuff...
        data: {cat_id: cat_id}, // <--------------------
        // stuff...
    }).done(function(){
        alert(cat_id); // <-------------------- not defined...
    });
});

如您所知,jQuery 已经弃用了之前的使用类型,$.ajax新的模式看起来像上面那样,在上面的done()函数代码中,我如何访问cat_id?在 done() 函数$(this)中不再被识别,cat_id也......

在引入 jQuery 之前done(),我们可以很容易地访问到发送的数据,因为我们正在使用success:,并且我们仍然可以通过 ajax 函数访问发送的数据。

4

4 回答 4

1

我无法复制您所写的行为,但是如果您需要在 done 函数中访问 jQuery(this),您可以执行以下操作:

$('#blah').on('click', function(){
    var cat_id = $(this).attr('id');
    var $self = $(this);
    $.ajax({
        // stuff...
        data: {cat_id: cat_id}, 
        // stuff...
    }).done(function(){
        alert($self.attr('id')); 
    });
});
于 2013-03-01T12:39:51.360 回答
1

在您的示例中,您仍然可以在 done 函数中访问 c​​at_id ,因为它仍在范围内。如果您需要访问 $(this) ,则需要将其绑定到 done 回调,如下所示:

$('#blah').on('click', function(){
    var cat_id = $(this).attr('id');
    $.ajax({
        // stuff...
        data: {cat_id: cat_id}, // <--------------------
        // stuff...
    }).done(function(){
        alert(cat_id); // alerts 'blah'
        alert($(this).attr('id')); // also alerts 'blah'
    }.bind(this)); // NOTICE THIS
});
于 2013-03-01T12:44:01.063 回答
0

虽然这可能是一种解决方法,但你可以这样做......

将 cat_id 存储在$(this).data("catId")中,然后轻松访问它......因此您可以轻松地相应地处理多个事件。

快乐编码:)

于 2013-03-01T12:37:45.613 回答
0

您可以尝试使用闭包的力量,这应该有效:

var cat_id = $(this).attr('id');
var done_handler = function(){
        alert(cat_id);
};
    $.ajax({
        // stuff...
        data: {cat_id: cat_id}, // <--------------------
        // stuff...
    }).done(done_handler);
于 2013-03-01T12:42:18.360 回答