Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ajax调用后重置变量?_Jquery_Ajax_Json - Fatal编程技术网

Jquery ajax调用后重置变量?

Jquery ajax调用后重置变量?,jquery,ajax,json,Jquery,Ajax,Json,我有两个ajax函数,如下所示: $("body").on("click", ".follow", function() { var followingId = $(this).data("following"); var followData = {"following_id" : followingId} $(this).addClass('disabled'); $.ajax({ url: "/users/follow/", ty

我有两个ajax函数,如下所示:

  $("body").on("click", ".follow", function() {
    var followingId = $(this).data("following");
    var followData = {"following_id" : followingId}
    $(this).addClass('disabled');
    $.ajax({
      url: "/users/follow/",
      type: "POST",
      data: followData,
      dataType: 'json',
      context: this,
      error: function () {},
      success : function (response) {
    $(this).addClass('unfollow');
    $(this).attr('data-unfollow', response.row_id);
    $(this).removeClass('follow');
      }
    });
  });

  $("body").on("click", ".unfollow", function() {
    var unfollowId = $(this).data("unfollow");
    var unfollowData = {"row_id" : unfollowId};
    $(this).addClass('disabled');
    $.ajax({
      url: "/users/unfollow/",
      type: "POST",
      data: unfollowData,
      context: this,
      error: function () {},
      success : function () {
        $(this).removeClass('disabled');
        $(this).addClass('follow');
        $(this).removeClass('unfollow');
      }
    });
  });
当我“跟踪”一个用户时,我得到“row_id”(比如row_id n°1)作为响应,并将其设置为unfollow数据。如果我“取消跟踪”用户,则行id n°1(如果已发送)。这很正常

如果我再次尝试以下操作,我会得到一个新的row_id(比如第2行)作为响应。这也很正常。但如果我想再次取消跟踪,将发送第1行id! 我想我应该更新一下

var unfollowId = $(this).data("unfollow"); 
(在html中,该值已更改为第2行),但当我发布第1行时,会发送该值

我能做到这一点吗


非常感谢

在第一个函数中,更改以下内容:

$(this).attr('data-unfollow', response.row_id);
为此:

$(this).data('unfollow', response.row_id);

仅供参考,您可以使用jQuery链接,这样的序列如下:

$(this).removeClass('disabled');
$(this).addClass('follow');
$(this).removeClass('unfollow');
$(this).removeClass('disabled').addClass('follow').removeClass('unfollow');
可以这样更有效地完成:

$(this).removeClass('disabled');
$(this).addClass('follow');
$(this).removeClass('unfollow');
$(this).removeClass('disabled').addClass('follow').removeClass('unfollow');
或者,如果您喜欢在单独的行中使用:

$(this).removeClass('disabled')
    .addClass('follow')
    .removeClass('unfollow');

不知道你在问什么。当我使用第一个函数时,我得到一个行id作为响应。我将其设置为数据属性。如果我重用第一个函数,我会得到一个新的row\u id,我将其设置为数据属性,但是如果我使用第二个函数,发送的row\u id仍然是第一个。Holly molly,它可以工作!非常感谢!你能解释一下区别吗?@Ziplo-如果没有调试,我不能100%肯定这个解释。我知道使用
.data()
读/写更容易、更简单、更安全。您可能无法使用
.attr()
编写这样的自定义属性。您可能必须使用
.prop()
,但无论如何,
.data()
更适合此用途。另外,看看我在回答中添加的另一个提示。我用“;”链接,因为我最多可以有10/11个。我建议的链接更有效,因为它不是为每个方法生成一个新的jQuery对象——它只是重用上一次调用中的同一个对象。