Ajax自动更改变量

时间:2019-02-22 04:24:52

标签: javascript jquery ajax

我在这里遇到问题。我发现全局变量每次进入Ajax都会改变。

$(document).on("keyup input", ".product-id", function () {
  var id_prod = this.id.replace('prod_id_', '');

  console.log('id_prod (outside ajax): ', id_prod);

  var inputVal = $(this).val();
  var resultDropdown = $('#result2').css({
      "display": "block"
    });

  if (inputVal.length) {
    $.ajax({
      type: 'POST',
      data: {  term: inputVal },
      url: 'backend-search-inv.php',

      success: function (data) {
        resultDropdown.html(data);

        $(document).on("click", "#result2 p", function () {
          var inv_id = $(this).text();
          //console.log('inv_id: ',inv_id);

          $.ajax({
            type: 'POST',
            data: {
              term: inv_id
            },
            url: 'autocomplete_inv.php',
            success: function (response) {
              var inv_info = jQuery.parseJSON(response);

              console.log('id_prod (in ajax): ', id_prod);

            },
            error: function () {
              console.log('Unable to access database.');
            }
          });

        }); //end of result being clicked
      }
    });
  } 
  else {
    resultDropdown.empty();
  }
});

我不明白为什么变量id_prod每次进入ajax都会递增。这是console.log的屏幕截图。

console.log

请参阅屏幕快照,每次我想向id_prod = 2输入内容时,ajax总是最终更新了id_prod = 1,然后又自动更新了id_prod = 2,并导致重复我的数据。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

因此,基本上我只是将id_prod声明为全局变量,并将0设置为默认值。然后,一旦id_prod事件进入keyup input事件,基本上就为它分配了新值。

感谢穆罕默德·优素福(Mohamed Yousef)在我自己的问题的评论部分中给出的答案!

    //DECLARE id_prod as a global variable...
var id_prod = 0;

$(document).on("keyup input", ".product-id", function(){

    id_prod = this.id.replace('prod_id_', '');
    var inputVal = $(this).val();
    var resultDropdown = $('#result2').css({"display":"block"});

    if(inputVal.length){
         $.ajax({
            type: 'POST',
            data: {term:inputVal},
            url: 'backend-search-inv.php',
            success: function(data){
                resultDropdown.html(data);
            }
        });
    }
    else{
        resultDropdown.empty();
    }
});

// WHEN RESULT BEING CLICKED...
$(document).on("click", "#result2 p", function(){
    var inv_id = $(this).text();

    $.ajax({
        type: 'POST',
        data: {term:inv_id},
        url: 'autocomplete_inv.php',
        success: function (response) {
            var inv_info = jQuery.parseJSON(response);

            console.log('id_prod (in ajax): ',id_prod);

            $('#prod_id_'+id_prod).val(inv_info[0]);
            $('#prod_qty_'+id_prod).val(1);
            $('#prod_disct_'+id_prod).val(0);
            $('#prod_type_'+id_prod).val(inv_info[1]);
            $('#prod_colour_'+id_prod).val(inv_info[2]);
            $('#prod_price_'+id_prod).val(inv_info[3]);

            $('#result2').empty();

            sumPrice();
        },
        error: function(){
            console.log('Unable to access database.');
        }
    });});