【问题标题】:Select $(this) from inside ajax inside function从 ajax 内部函数中选择 $(this)
【发布时间】:2018-02-27 11:12:00
【问题描述】:

在下面的代码中,我循环遍历每个锚链接,获取文本值,通过 ajax 触发它并返回 json 响应。一切正常。

但是,在成功的最后阶段,我试图将响应作为一个类添加到我当前使用 $(this) 循环的锚中

$( ".field-name-field-staff .field-item a" ).each(function() {
      var username = $(this).text();
      var date = $(this).closest('td.views-field-field-event-date').find('span.date-display-single').text();
      $.ajax({
          type: 'GET',
          url: "bookings/availability/data",
          data: {
              "username": username,
              "date" : date
          },
          success: function (data) {
            console.log(data);
            console.log(data.css);
            console.log(this);
            $(this).addClass(data.css); 
          }
        });
    });

在上面的示例中,在 console.logs 中,我得到...

  • 所有数据的数组(作品)
  • 来自该数组的单个值(有效)
  • ajax 请求对象的完整数组转储(不是锚标记 i 想要)

有人可以告诉我如何跳出 ajax 并在其中获取锚对象吗?

【问题讨论】:

  • 相关链接将提供更多信息 - 但要解决此问题,您需要将“this”存储在 ajax 请求之外,然后在内部使用,例如 $("..").each(function() { var el = this; ... $.ajax({ .. success: function (data) { console.log(el); el.addClass(data.css); } ...

标签: jquery ajax


【解决方案1】:

ajax里面的$(this)是指向ajax成功函数的this。您需要收集 this 对象以使其指针与父对象对齐。

这里实现这个试试下面

$(".field-name-field-staff .field-item a").each(function() {
  var self = $(this);
  var username = self.text();
  var date = self.closest('td.views-field-field-event-date').find('span.date-display-single').text();
  $.ajax({
    type: 'GET',
    url: "bookings/availability/data",
    data: {
      "username": username,
      "date": date
    },
    success: function(data) {
      console.log(data);
      console.log(data.css);
      console.log(this);
      self.addClass(data.css);
    }
  });
});

【讨论】:

  • 啊哈,这很有道理。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 2015-05-09
相关资源
最近更新 更多