2017-02-03 104 views
-1

我试图一遍又一遍读取文本文件,然后根据文本更改页面。我目前正在阅读这些文件的方式需要很长时间,而且我在问是否有更快的方法来完成它。jquery快速读取文件

<script> 
scoreIsShown = false 
team1 = "" 
team2 = "" 
score1 = 0 
score2 = 0 
function UrlExists(url) 
{ 
    $.get("showscore.txt", function(data) { 
     $(".result").html(data); 
     showscore = (data.toLowerCase() == "true") 

    }); 
    $.get("team1.txt", function(data) { 
     `enter code here`$(".result").html(data); 
     //(data); 
     team1 = data 

    }); 
    $.get("team2.txt", function(data) { 
     $(".result").html(data); 
     //(data); 
     team2 = data 

    }); 
    $.get("score1.txt", function(data) { 
     $(".result").html(data); 
     //(data); 
     s = (data.toLowerCase() == "true") 
     score2 = parseInt(data) 

    }); 
    $.get("score2.txt", function(data) { 
     $(".result").html(data); 
     //(data); 
     score2 = parseInt(data) 

    }); 

} 
function showScore1() 
{ 
    x = document.createElement("table") 
    tr = document.createElement("tr") 
    td = document.createElement("td") 
    team1p = document.createTextNode(team1) 
    td.appendChild(team1p) 
    tr.appendChild(td) 
    x.appendChild(tr) 
    document.body.appendChild(x) 
} 
function onload() 
{ 
    while (true){ 
     UrlExists("binary1.txt") 
     setTimeout(function() 
     { 
      if (showscore) 
      { 
       if (!scoreIsShown) 
       { 
        showScore1() 

       } 
      }else{ 
       if (scoreIsShown) 
       { 
        //hideScore() 
       } 
      } 
     }, 10) 
    } 
} 
</script> 

所有文件都是一行长,每个文件少于10个字符。

+0

不是真的回答你的问题,但有没有一个原因,你不能将文件转换为json并使用ajax请求来获取json数据? – Michael

+0

也没有真正回答你的问题,但没有错误在控制台做它作为一个奇怪的数据类型 - 可能会添加$ .get('showscore.txt',函数(数据){...},'文本'); – dmoo

+0

只是一个注释:你的score1存储它的结果得分2 :) ..就像@迈克尔说,存储在一个简单的JSON数据,并阅读,会更好。但即便如此,我看不出为什么阅读5个文本文件需要很长时间,您通过300波特调制解调器运行您的网站。 :) – Keith

回答

1

老兄!你正在创建一个无限循环,这就是为什么它花费太长时间

while (true){ 
    UrlExists("binary1.txt") //<--Everything here is async so it returns immediately 
    setTimeout(function() 
    { 
     if (showscore) 
     { 
      if (!scoreIsShown) 
      { 
       showScore1() 

      } 
     }else{ 
      if (scoreIsShown) 
      { 
       //hideScore() 
      } 
     } 
    }, 10) //<--This is also async, so it returns immediately 
    //You've done almost nothing, lets do it again! 
} 

您正在请求文件并设置超时数十次或每秒一次的时间。

做这样的事情,而不是:

function UrlExists(url) { 
    $.when(//start a promise to keep track of every request 

     $.get("showscore.txt", function(data) { 
      $(".result").html(data); 
      showscore = (data.toLowerCase() == "true") 
     }), 
     $.get("team1.txt", function(data) { 
      $(".result").html(data); 
      //(data); 
      team1 = data 
     }), 
     $.get("team2.txt", function(data) { 
      $(".result").html(data); 
      //(data); 
      team2 = data 
     }), 
     $.get("score1.txt", function(data) { 
      $(".result").html(data); 
      //(data); 
      s = (data.toLowerCase() == "true") 
      score2 = parseInt(data) 
     }), 
     $.get("score2.txt", function(data) { 
      $(".result").html(data); 
      //(data); 
      score2 = parseInt(data) 
     }) 

    ).done(function() { 
     //when all done, continue 
     //do the thing you was doing in the while 
     if (showscore) 
     { 
      if (!scoreIsShown) 
      { 
       showScore1() 
      } 
     }else{ 
      if (scoreIsShown) 
      { 
       //hideScore() 
      } 
     } 
     //and set a timer to call the funcion again later 
     setTimeout(function() { 
      UrlExists(url); 
     },60000); 
    }); 

} 

function onload() { 
    UrlExists("binary1.txt"); 
} 

如果它仍然缓慢,这是你的服务器。我建议创建一个包含所有数据(可能是JSON或XML)的单个文件,并且每次只创建一个请求。我强烈建议你这样做。

+0

它需要持续不断地进行检查,因为它将用于实时将实时影响应用于实时流。即时搞清楚如何做到这一点,然后把它放在实际的网站 –

+0

只需在'timeOut'中使用较小的时间间隔。但是你必须摆脱循环,等待请求完成才能创建新的请求,否则你会使客户端的浏览器速度太慢甚至停止,并且服务器会抓住它,甚至可能会禁止客户端的IP。而且你不知道哪个请求先完成。您可以从最后一个请求获得更新,然后从第一个请求获得更新,然后第三个完成,等等。在单个请求中提取所有内容也会有所帮助。也许你可以用PHP或其他服务器端脚本将所有内容合并到一个文件中。 – Gabriel