【问题标题】:How can I stop the Iframe from constantly reloading after setInterval (JQuery)如何在 setInterval (JQuery) 之后阻止 iframe 不断重新加载
【发布时间】:2018-09-17 14:52:16
【问题描述】:

一个js新手

如何防止页面在设置间隔后不断重新加载?

基本上,它需要检查外部 JSON 文件的值为 0/1 并显示和隐藏 Iframe src(它需要每 5 秒检查一次文件是否有更改),只有在值更改时才重新加载。

有没有办法在本地记录值或缓存它?

function ScreenSwitch(){
$.getJSON(screenNumberUrl, (data) => {
  if(data.ScreenState == 0){
    $("#os-iframe").attr("src", "about:blank");
  } else {
    $("#os-iframe").attr("src", "OverallStandings.html");
  }
});
}
ScreenSwitch();
setInterval(ScreenSwitch, 5000);

【问题讨论】:

  • 如果你给它一个类来表示 iframe 是否为空白,那么你应该检查它是否已设置。如果已设置,且 ScreenState 仍为 0,则不执行任何操作
  • 我认为这是一个好的开始:developer.mozilla.org/en-US/docs/Glossary/Variable
  • 所以间隔改变后取消???或者如果值不断变化,则存储该值....
  • 谢谢!为您的解决方案和 cmets 提供

标签: javascript jquery html


【解决方案1】:

您需要更改逻辑以存储先前检索到的值。然后您将知道值是否在下一个请求中更改,以便更新iframesrc。尝试这个:

function ScreenSwitch() {
  $.getJSON(screenNumberUrl, (data) => {
    if (previousScreenState != data.ScreenState) {
      $("#os-iframe").attr("src", data.ScreenState == 0 ? 'about:blank' : 'OverallStandings.html');
    }
    previousScreenState = data.ScreenState;
  });
}

var previousScreenState;
ScreenSwitch();
setInterval(ScreenSwitch, 5000);

上述逻辑假设data.ScreenState 可以在运行时在01 之间多次动态变化。如果它只能更改一次,那么这可以更简单。

【讨论】:

  • 谢谢你。做了一些小的改动,它工作了。函数 ScreenSwitch() { $.getJSON(screenNumberUrl, (data) => { previousScreenState == data.ScreenState; if (previousScreenState != data.ScreenState) { $("#os-iframe").attr("src", data.ScreenState == 0 ? 'about:blank' : 'OverallStandings.html'); } previousScreenState = data.ScreenState; }); } ScreenSwitch(); setInterval(ScreenSwitch, 5000);
  • 您添加的 previousScreenState == data.ScreenState 行实际上并没有做任何事情,所以我不确定您认为它有什么不同。
  • 我删除了不是问题的那一行。这很简单);就在阻止脚本运行的 previousScreenState 之前,一旦删除它就可以很好地工作。
  • 啊,是的,抱歉。我应该先测试一下 :)
【解决方案2】:

$("#os-iframe").attr("src" 将加载 iframe。为什么不

var url = "screenNumberUrl"+"&rnd="+Date.getTime(); // stop caching
$.get(url,function(data) { 
  if (data.ScreenState == 0) $("#someDiv").hide();
  else $("#someDiv").load("OverallStandings.html").show();

})

那么你甚至不需要 iFrame

【讨论】:

  • 感谢您的解决方案。
【解决方案3】:

@Rory McCrossan

做了微小的改变,它按照我想要的方式工作。谢谢。

 function ScreenSwitch() {
  $.getJSON(screenNumberUrl, (data) => {

   if (previousScreenState != data.ScreenState) {
    $("#os-iframe").attr("src", data.ScreenState == 0 ? 'about:blank' : 'OverallStandings.html');
   }
   previousScreenState = data.ScreenState;
 });
}


ScreenSwitch();
setInterval(ScreenSwitch, 5000);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2013-11-19
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多