JQuery的$(这)不是AJAX POST之后访问?(JQuery $(this) not acc

2019-09-18 02:50发布

比方说,我有一堆共享点击事件链接:

<a href="#" class="do-stuff">Click me</a>
<a href="#" class="do-stuff">Click me</a>
<a href="#" class="do-stuff">Click me</a>
<a href="#" class="do-stuff">Click me</a>

而在$(“做-的东西”)。单击功能我执行与东西更新数据库jQuery的AJAX POST请求,我也得到一个成功的响应。 阿贾克斯完成后,我只是想更改链接文本的价值是什么我送从服务器返回的...

$('.do-stuff').click(function () {
$.ajax({
  type: "POST",
  url: "MyWebService.asmx/DoSomething",
  data: '{CurrentLinkText: "'+ $(this).text() +'"}',
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function (result) {
    $(this).text(result.d);
  },
  error: function (XMLHttpRequest, textStatus, errorThrown) {
    alert(textStatus);
  }
});

});

这调用就好了,我验证了“result.d”的确是来自服务器的文本,但文本没有改变。 我认为,$(本)元素不再是可访问的AJAX后门柱? 我能做些什么来解决此问题?

Answer 1:

一般来说,当你失去这样的背景下,可以保存到对象的引用。 像这样:

function clickHandler() {
    var that = this;
    $.ajax( { url: '#',
        success: function (result) {
            $(that).text(result.d);
        }
    );
}


Answer 2:

在这里看到: $(本)内AJAX的成功不工作

您可以设置背景选项 :

这个对象将作出所有Ajax相关回调的背景下。 默认情况下,上下文是表示在调用中使用AJAX的设置($ .ajaxSettings合并传递到$就设置)的对象。 (......)

例:

$.ajax({
    //...
    context: this,
    success: function(json) {
        //...
    }
});

或使用$ .proxy :

$.ajax({
    //...
    success: $.proxy(function(json) {
         //...
    }, this)
});


Answer 3:

尝试:

success: $.proxy(function(result) {
         //...
    }, this)


Answer 4:

有很多方法可以做到这一点,你可以从这里看到答案。 就个人而言,我更喜欢构造必然的当前值的函数this

success: (function(target) {
              return function(result) {
                   $(target).text(result.d);
              }
         })(this)

它的整洁,干净,和$(this)将保持不变,因为它是在外部上下文; 也就是说,它会引发该事件的元素。



Answer 5:

jQuery('#youridvalue').html(result.d);
jQuery('.yourclassvalue').html(result.d);

用它



文章来源: JQuery $(this) not accessible after ajax POST?