我有一个JS语句,它每30秒通过Ajax获取数据。我希望我的if语句的方式是,如果具有相同值的变量名已经被处理,它将不再处理它。例如,如果var名称John已经被处理过,它就不会再处理它。
有人有办法解决这个问题吗?
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);
});发布于 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
请参阅下面代码中的注释(未测试).
// 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);
});https://stackoverflow.com/questions/64903130
复制相似问题