Javascript 在我将新数组传递给同一个函数后,我不知道如何停止对该函数中的数组进行迭代
在我的应用程序中,我连接到一个新闻服务并收回一系列文章;我每20分钟做一次 在这20分钟内,我循环浏览我提取的文章数组,每15秒从数组中取出一篇新文章 我的问题是,20分钟后,我从新闻服务获得一个新的数组,并开始在该数组中循环。显然,我在做一个双循环,原始数组加上新数组 然后,又过了20分钟,我又在浏览另一系列的新闻文章。。。现在一共三个 这种情况持续了一整天,直到它变成了一个丑陋的烂摊子 我正试图找出在获得新阵列后如何停止原始循环:Javascript 在我将新数组传递给同一个函数后,我不知道如何停止对该函数中的数组进行迭代,javascript,arrays,xmlhttprequest,Javascript,Arrays,Xmlhttprequest,在我的应用程序中,我连接到一个新闻服务并收回一系列文章;我每20分钟做一次 在这20分钟内,我循环浏览我提取的文章数组,每15秒从数组中取出一篇新文章 我的问题是,20分钟后,我从新闻服务获得一个新的数组,并开始在该数组中循环。显然,我在做一个双循环,原始数组加上新数组 然后,又过了20分钟,我又在浏览另一系列的新闻文章。。。现在一共三个 这种情况持续了一整天,直到它变成了一个丑陋的烂摊子 我正试图找出在获得新阵列后如何停止原始循环: clearInterval(articleInterval
clearInterval(articleIntervalVar)代码>
newsArticlesArray=null代码>
newsFunction();
newsIntervalVar = setInterval(newsFunction, 1200000);
function newsFunction() {
xmlHttpNewsObject = GetXmlHttpObject();
if (xmlHttpNewsObject === null){
alert ("Browser does not support HTTP Request");
return;
}
var url = "";
xmlHttpNewsObject.open("GET", url, true);
xmlHttpNewsObject.onreadystatechange = getTheNews;
xmlHttpNewsObject.send(null);
}
function getTheNews(){
if (xmlHttpNewsObject.readyState == 4 && xmlHttpNewsObject.status == 200){
var newsArticlesArray = JSON.parse(xmlHttpNewsObject.responseText).articles
drawTheNews(newsArticlesArray);
return;
}
}
function drawTheNews(newsArticlesArray) {
var news = document.getElementById('news');
var numberOfArticles = newsArticlesArray.length;
var i = 0;
news.innerHTML = newsArticlesArray[i].title);
var articleIntervalVar = setInterval(function () {
i++;
if (i === numberOfArticles) i = 0;
news.innerHTML = newsArticlesArray[i].title);
}, 15000);
}
我会使用一种稍微不同的逻辑,每当您获得要显示的文章列表时设置间隔,并在这之前清除任何现有间隔 此外,我还清理了所有20世纪的
xmlHttp
文献,并用fetch
:)取代了所有这些文献
const url=“…”;
const newsElem=document.getElementById('news');//缓存元素,而不是每次都访问它
让文章=[];
让articleInterval=null;
const newsFunction=async()=>{
试一试{
const response=等待获取(url)
articles=wait response.json();
clearInterval(articleInterval);//在此处清除现有的间隔
articleInterval=setInterval(drawTheNews,15000);//设置新的间隔
}捕捉(错误){
log(“获取新闻时出错:”,err)
}
}
const drawTheNews=()=>{
const article=articles.pop();
如果(!文章){
log(“耗尽所有新闻!”)
clearInterval(articleInterval)
返回;
}
newsElem.innerHTML=article.title
}
newsFunction();
设置间隔(新闻功能,1200000)代码>您只需清除超时,将ref移动到全局作用域,并每次清除它即可删除旧作用域
var articleIntervalVar;
newsFunction();
newsIntervalVar = setInterval(newsFunction, 1200000);
function newsFunction() {
xmlHttpNewsObject = GetXmlHttpObject();
if (xmlHttpNewsObject === null){
alert ("Browser does not support HTTP Request");
return;
}
var url = "";
xmlHttpNewsObject.open("GET", url, true);
xmlHttpNewsObject.onreadystatechange = getTheNews;
xmlHttpNewsObject.send(null);
}
function getTheNews(){
if (xmlHttpNewsObject.readyState == 4 && xmlHttpNewsObject.status == 200){
var newsArticlesArray = JSON.parse(xmlHttpNewsObject.responseText).articles
drawTheNews(newsArticlesArray);
return;
}
}
function drawTheNews(newsArticlesArray) {
var news = document.getElementById('news');
var numberOfArticles = newsArticlesArray.length;
var i = 0;
news.innerHTML = newsArticlesArray[i].title);
clearInterval(articleIntervalVar);
articleIntervalVar = setInterval(function () {
i++;
if (i === numberOfArticles) i = 0;
news.innerHTML = newsArticlesArray[i].title);
}, 15000);
}
我试过这样做,但是当需要写入其innerHTML
时,newsElem
似乎是null
,这是一个完全不同的问题。这意味着您的JS在加载HTML之前运行。谢谢,但是在检索新的新闻数组时,数组仍然重叠。