【问题标题】:Storing ajax response data into array and compare it to the last values将ajax响应数据存储到数组中并将其与最后一个值进行比较
【发布时间】:2017-02-07 07:23:50
【问题描述】:

我被这些困住了。我想创建一个每 4 秒运行一次的函数。现在我的函数将从我的数据库中获取所有的 queue_id 并一次又一次地将其存储在数组中,存储后,我将每 4 秒一次又一次地比较它,如果有变化,那么我会做一些事情。

示例执行:如果我的数据库响应为 queue_id's: 1,2,3,4,5,那么我将从数组中存储这些数据。存储后,我将每 4 秒再次查询一次,如果它返回 1,2,4,5 或 1,2,3,5 我会做一些事情,但如果它返回相同的 1,2,3,4,5 那么我不会做什么。

我不知道如何在 javascript 中存储或创建数组。请帮帮我:

function check_getqueue(clinicID, userID) {
  $.ajax({
    url: siteurl+"sec_myclinic/checkingUpdates/"+clinicID+"/"+userID,
    type: "POST",
    dataType: "JSON",
    success: function(data) {
      for(var i=0;i<data.length;i++) {
        var tmpCountQ = data[i]['queue_id'];
      };

      if (tmpCountQ < lastcountQueue) { 

      }
      lastcountQueue = tmpCountQ;
    }
  });
}

【问题讨论】:

  • 看起来 data 已经是一个数组...如果必须,请使用 x = data 将其放入另一个变量(在本例中为 x)...
  • @JaromandaX 感谢您的评论先生,我如何将数据响应存储到数组中,并将它的值从以前的值到新的值进行比较,因为我让这个函数每 4 秒运行一次。
  • store:就像我刚才说的 - 比较一下,这是 javascript 101 的东西
  • 我能想到的一种方法是,将数据库中的值存储到某处的隐藏字段中(分隔符分隔的字符串格式),每次您的 ajax 代码将隐藏字段值与数据库值进行比较时,最后您将使用数据库中的最新值更新隐藏字段值。
  • @ShrikantMavlankar 先生,我不想为这种情况添加另一个表,因为我只想存储所有 queue_id,如果它给了我类似的东西:1,2,3,4,5 然后下一个查询将是 1,2,3,4 然后我将刷新 div,如果它给我 1,2,4,5 我将再次刷新 div 每次数据库中 queue_id 中的值发生变化时。跨度>

标签: javascript php arrays ajax


【解决方案1】:

您需要跟踪最后收到的一组 id 并将它们与新的进行比较。当发现差异时,调用您的 doSomething() 并更新记录以供下次运行。

为了加快速度,您可以先检查长度。更多信息请在下方评论区查看。

var previousQueueIDs = [];

function doSomething() {
  // do something
  // ...
  // set timer for the next run
  setTimeout(check_getqueue, 4000);
}

function check_getqueue(clinicID, userID) {
  $.ajax({
    url: siteurl+"sec_myclinic/checkingUpdates/"+clinicID+"/"+userID,
    type: "POST",
    dataType: "JSON",
    success: function(data) {
      var queueIDs = [];
      if(previousQueueIDs.length != data.length) {
        previousQueueIDs = queueIDs;
        return doSomething();
      }
      // length didn't change, so check further
      // create new array for the current values
      for(var i=0;i<data.length;i++) {
        queueIDs.push(+data[i]['queue_id']);
      };

      // sort them for faster comparison
      queueIDs.sort( function(a,b) {
        return a-b;
      });

      // check one by one and exit to run doSomething
      // as soon as the first difference found
      for(var i=0; i<queueIDs.length; i++) {
        if(queueIDs[i] != previousQueueIDs[i]) {
          previousQueueIDs = queueIDs;
          return doSOmething();
        }
      }
      // no difference this time, just set timer for the next run
      setTimeout(check_getqueue, 4000);
    }
  });
}

【讨论】:

  • 没有必要对它进行排序,因为在我的查询中我已经让它升序了
【解决方案2】:

使用 push,并在 ajax 请求之外声明数组。现在一切正常

function check_getqueue(clinicID, userID) {
  var tmpCountQ = [];
  var lastCon = [];
  $.ajax({
    url: siteurl+"sec_myclinic/checkingUpdates/"+clinicID+"/"+userID,
    type: "POST",
    dataType: "JSON",
    success: function(data) {
      for(var i=0;i<data.length;i++) {
        tmpCountQ.push(data[i]['queue_id']);
      };
      if(typeof lastCon[0] != "undefined")
      {
        for(j=0;j < tmpCountQ.length;j++)
        {
          if(tmpCountQ[j] != lastCon[j])
          {
            lastCon[j] = tmpCountQ[j];
          } 
        }
      }
      else
      {
       lastCon = tmpCountQ;
      }

      console.log(tmpCountQ);
    }
  });
}

【讨论】:

  • 谢谢你的回答,先生,你能把它和这些一起添加吗:我如何将数据响应存储到数组中,并将它的值从以前的值到新的值,因为我让这个函数运行每个4 秒
  • json url 是什么?可以发帖吗?
  • JSON URL SIR 是什么意思。它已经在那里了。 siteurl+..等
  • 我想得到json对象,给你写函数检查值
  • 它给了我这些先生的结果:[{"queue_id":"1"},{"queue_id":"3"}]
猜你喜欢
  • 2013-10-23
  • 2011-09-16
  • 2018-10-24
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 2022-12-17
相关资源
最近更新 更多