ajax比较更改,如果有更改,则会更新

时间:2017-05-02 05:24:20

标签: javascript jquery ajax setinterval

我想在我的代码中进行审核,我正在制作一个每秒运行一次的JavaScript / ajax代码。现在这是我的代码所做的, 它将检查队列中是否有更改,如果有更改,则会发出警报,如果没有更改,则会继续运行以始终检查,现在为什么有时它会发出警报,有时它不会发出警报。这是我的代码:

function check_getqueue(clinicID, userID) {
var tmpCountQ = [];
  $.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])
          {
            $("#boxqueue").empty();
            alert("there is change");
            // refresh_afterdel(clinicID, userID);
            lastCon[j] = tmpCountQ[j];
          } 
        } 
      }
      else
      {
       lastCon = tmpCountQ;
      }
      // console.log("lastCon "+lastCon)
      // console.log("tmpCountQ "+tmpCountQ);
    }
  });
}

2 个答案:

答案 0 :(得分:0)

变量j未初始化。因此,它可能会更新相同的全局j

function check_getqueue(clinicID, userID) {
var tmpCountQ = [];
  $.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(var j=0;j < tmpCountQ.length;j++)
        {
          if(tmpCountQ[j] != lastCon[j])
          {
            $("#boxqueue").empty();
            alert("there is change");
            // refresh_afterdel(clinicID, userID);
            lastCon[j] = tmpCountQ[j];
          } 
        } 
      }
      else
      {
       lastCon = tmpCountQ;
      }
      // console.log("lastCon "+lastCon)
      // console.log("tmpCountQ "+tmpCountQ);
    }
  });
}

答案 1 :(得分:-1)

您无法保证对服务器的同步调用,因此不能将所有未在成功或错误函数中声明的变量作为本地变量保证为FIFO,这是队列所需的。解决方案是使用具有包序列号的缓冲区将数据组织到fifo队列中。这意味着将返回的内容更改为具有整数id的JSON对象的JSON数组。检查数据时,请确保在发出警报之前已看到正确的数据包。当您有下一个数据包警报并重复,直到服务器的队列为空。