首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当值被复制时,在JavaScript If语句中返回false

当值被复制时,在JavaScript If语句中返回false
EN

Stack Overflow用户
提问于 2020-11-18 23:42:31
回答 1查看 104关注 0票数 0

我有一个JS语句,它每30秒通过Ajax获取数据。我希望我的if语句的方式是,如果具有相同值的变量名已经被处理,它将不再处理它。例如,如果var名称John已经被处理过,它就不会再处理它。

有人有办法解决这个问题吗?

代码语言:javascript
复制
ajax_call = function() {
  $.ajax({
    type: "GET",
    url: "test.php",
    dataType: "JSON",
    success: function(response) {

      var len = response.length;
      for (var i = 0; i < len; i++) {
        var name = response[i].name;
        var size = response[i].size;

      }

      var one = "6-8";

      if (size == one && name != name) {
        person.val++;
        person.value = person.val;

      } else {
        console.log("name already exist");
      }
    }
};
var interval = 30000;
setInterval(ajax_call, interval);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-19 00:49:58

正如注释中提到的,您将需要在$.ajax函数作用域之外的变量,在成功时更新该变量,并重新检查下一个$.ajax调用。目前,每次$.ajax触发success:中的vars时,都会使用新的response数据进行重置。

在本例中,我使用new Set()对象添加/存储名称,并检查名称是否存在,这样,如果let processed = new Set();存储对象中不存在名称,则可以执行魔术。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

请参阅下面代码中的注释(未测试).

代码语言:javascript
复制
// constant variable ajax_call_interval
const ajax_call_interval = 30000;

// updatable variable processed set object for storing processed names
let processed = new Set();

// updatable bool check variable ajax_call_running
let ajax_call_running = false;

// ajax call function
function ajax_call() {

  // update ajax_call_running var to bool true
  ajax_call_running = true;

  // jquery ajax call
  $.ajax({
    type: "GET",
    url: "test.php",
    dataType: "JSON",
    success: function(response) {

      // great success 
      console.log("success");

      // loop through response json as key / data
      $.each(response, function(key, data) {

        // if processed set object has data.name already
        if (processed.has(data.name)) {

          // log name already exists
          console.log("name already exists in processed");

          // this will skip to the next json data item in this jquery each loop

        // else if name does exist in processed set object then...  
        } else {

          // add new name to processed set object var for use in next ajax call
          processed.add(data.name);

          // log name added to processed
          console.log("new name added to processed");

          // do your other magic here for unprocessed name json data
          // ...
          let name = data.name;
          let size = data.size;

        }

      });

      // i am assuming the below should run once the above jquery each function has completed looping through your json response

      // update ajax_call_running var to bool false
      ajax_call_running = false;

      // re-run our ajax call in 30000 ms
      ajax_call_runner(ajax_call_interval);

    },
    error: function(error) {

      // oh no 
      console.log("error");

      // do error response stuff here...

      // update ajax_call_running var to bool false
      ajax_call_running = false;

      // re-run our ajax call in 30000 ms anyway
      ajax_call_runner(ajax_call_interval);

    }

  });

}

// ajax call runner function with interval ms param
function ajax_call_runner(interval) {

  // set time out interval for ajax runner
  setTimeout(function() {

    // if ajax call is not running then
    if (!ajax_call_running) {

      // fire the ajax call
      ajax_call();

    }

  // interval time ms using parent function param
  }, interval);

}

// shorthand for $(document).ready()
$(function() {

  // run our ajax call in 1 ms
  ajax_call_runner(1);

});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64903130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档