$(this)里面的AJAX成功不起作用

我想改变一些使用onclick的旧代码,以便我使用$(this)。 问题是$(this)在成功的时候不起作用。 反正有没有把它设置为var。

$('.addToCart').click(function() { $.ajax({ url: 'cart/update', type: 'post', data: 'product_id=' + $(this).attr("data-id"), dataType: 'json', success: function(json) { if (json['success']) { $(this).addClass("test"); } } }); }); 

问题

在callback中, this指的是Ajax调用的jqXHR对象,而不是事件处理程序绑定的元素。 详细了解如何在JavaScript中使用 。


解决scheme

您可以设置context选项 :

这个对象将成为所有与Ajax相关的callback的上下文。 默认情况下,上下文是表示调用中使用的ajax设置的对象( $.ajaxSettings与传递给$.ajax的设置合并)。 (……)

 $.ajax({ //... context: this, success: function(json) { // `this` refers to the value of `context` } }); 

或使用$.proxy

 $.ajax({ //... success: $.proxy(function(json) { // `this` refers to the second argument of `$.proxy` }, this) }); 

或者在callback之外保留对这个值的引用:

 var element = this; $.ajax({ //... success: function(json) { // `this` refers to the jQXHR object // use `element` to refer to the DOM element // or `$(element)` to refer to the jQuery object } }); 

有关

  • 如何在callback中访问正确的`this` / context?
 jQuery(".custom-filter-options .sbHolder ul li a").each(function () { var myStr = jQuery(this).text(); var myArr = myStr.split(" ("); url = 'your url'; // New Code data = myArr[0]; try { jQuery.ajax({ url : url, context: this, type : 'post', data : data, success : function(data) { if(data){ jQuery(this).html(data); }else{ jQuery(this).html(myArr[0]); } } }); } catch (e) { } });