猿问

多次调用 ajax 导致重复响应

我创建了一个 ajax 函数,它通过从我的数据库中获取来返回我的项目价格。我确定我的 php 没有任何问题,但有时我两次得到相同的结果!


jQuery


$('.removemore___').click(function(e) {

  var item_id = $(this).attr('data-item');

  var col_id = $(this).attr('data-col');

  var value = $(this).attr('data-value');


  if ($(this).attr('data-trash') == 'trash') {

    newPopuper('alert_sure__', 'flex', 'blackScreen');

    $('.__aggtoyes').attr('data-item', item_id);

    $('.__aggtoyes').attr('data-col', col_id);

    $('.__aggtoyes').attr('data-value', value);

  } else {

    $.ajax({

      type: "POST",

      url: "includes/chekavailableitem.php?remove",

      data: {

        item_id: item_id,

        col_id: col_id,

        value: value

      },

      dataType: "text",

      success: function(response) {

        var iNum = parseInt(value);

        iNum--;

        if (response == 'done') {

          $('.value__cart[data-item=' + item_id + '][data-col=' + col_id + ']').html(iNum);

          $('.removemore___[data-item=' + item_id + '][data-col=' + col_id + ']').attr('data-value', iNum);

          $('.addmore___[data-item=' + item_id + '][data-col=' + col_id + ']').attr('data-value', iNum);

          if (iNum == 1) {

            location.reload();

          }

        } else if (response == 'deleted') {

          location.reload();

        }

      },

      error: function() {

        $('#wrong-signup').html(': 102');

      },

      timeout: 5000

    });

  }


  $.ajax({

    type: "POST",

    url: "includes/get_finalize_cart.php",

    data: {},

    cache: false,

    async: true,

    dataType: "json",

    success: function(response) {

      // var final_price = $.parseJSON(response)

      console.log(response);

      if (response[0] == 'done') {

        $('.final_price__').html(response[1] + ' <span style="font-size: .786rem;font-weight: 400">تومان</span>');

      } else {

      }

    },

    error: function() {

      $('#wrong-signup').html(': 101');

    },

    timeout: 5000

  });

  e.stopImmediatePropagation();

  return false;

});


我还将显示控制台页面的屏幕截图,以便您查看我的结果:

http://img4.mukewang.com/6348c3d00001bd1b13940424.jpg

白猪掌柜的
浏览 69回答 1
1回答

梦里花落0921

在调用之前,您无需等待chekavailableitem.php?remove完成get_finalize_cart.php。由于 AJAX 是异步的,后者可能会先处理,因此您将获得旧值的副本。您应该将第二次$.ajax()调用放在sucess:第一次调用的函数中$.ajax(),或者使用承诺。
随时随地看视频慕课网APP
我要回答