Вызов ajax несколько раз приводит к дублированию ответа - PullRequest
0 голосов
/ 01 марта 2020

Я создал функцию 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;
});

Вот полная функция в jQuery

<?php 
    include 'db.php';
    include 'function.php';

    $user_id = extractUserId();
    $chekcart = "SELECT * FROM `box` WHERE `user_id`='$user_id'";
    $result_cox_cart_cheker = connectANDdie($chekcart);
    $sum_price = 0;
    while($row_items = mysqli_fetch_assoc($result_cox_cart_cheker)){
        $price = $row_items['item_price'];
        $value = $row_items['value'];
        $sum_price = $sum_price  + ( $price*$value );

    $final_value = number_format($sum_price);
    $result = ['done',$final_value];
    $result1 = json_encode($result);

    echo $result1;
}

, и я также покажу скриншот со страницы консоли, чтобы вы могли увидеть мой результат:

console pics

Network tab

1 Ответ

0 голосов
/ 02 марта 2020

Вы не ждете завершения chekavailableitem.php?remove, прежде чем позвонить get_finalize_cart.php. Поскольку AJAX является асинхронным, последнее может обрабатываться первым, поэтому вы получите дубликат старого значения.

Вы должны поместить второй вызов $.ajax() в функцию sucess: первого $.ajax() позвоните или используйте обещание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...