08. juni 2004 - 10:43Der er
23 kommentarer og 1 løsning
Kan dette lade sig gøre , hvis JA, hvordan ?
Hej Alle.
Jeg har en ide om at flg. skal kunne lade sig gøre, men hvordan. Jeg har en html side med noget javascript som henter noget tekst fra en TXT fil på min webserver. Som det er nu bliver html side bare reloadet hvert 15. min. Men kan man ikke lave et script som hele tiden kigger på TXT filens "date og time stamp" og hvis TXT filens "date og time stamp" er nyere end sidst der blev kigget på det reloades HTML filen ??.
Den kode som henter teksten fra TXT filen ser således ud. <script type="text/javascript" src="Temp_to_net.txt"></script>
Jeg tror ikke det er så nemt, derfor 200 point til den der knækker nøden.
Du skal i så fald stadig kalde en side hvert 15 min, en side der undersøger om filen er ændret. Fordelen bliver så bare at der ikke skal hentes noget (særligt) hvis filen er uændret.
<%@ Language=VBScript %> <% lastModified = Cdate(Request.QueryString("lastModified")) fileURL = "Temp_to_net.txt" set oFso = createobject("scripting.filesystemobject") set theFile = oFso.getfile(server.mappath(fileURL)) theDate = theFile.datelastmodified set theFile = nothing set theFile = oFso.opentextfile(server.mappath(fileURL),1,False) theContent = theFile.ReadAll set theFile = nothing set oFso = nothing
theLocation = Request.ServerVariables("SCRIPT_NAME") if lastModified <> "" then theLocation = theLocation & "?lastModified=" & Server.URLEncode(lastModified)
doUpdate = (lastModified <> theDate)
%> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <script language=JavaScript> function checkAndReload(){ var d = parent.document; var oDiv = d.all.div_Temp_to_net; if (<%=lcase(doUpdate)%>) oDiv.innerHTML = document.forms[0].theContent.value; t = window.setTimeout("window.location = '<%=theLocation%>'", 2000) } </script>
Hmmm, "DEN" brokker sig ikke over noget, men der bliver heller ikke vist noget på slærmen, andet end en hvid side, når man kører den første kode: (denne har jeg gemt som en html fil IK ?)
I såfald vises ingen ting, hvis jeg kalder den anden del af koden, vises det jeg skal se, men siden bliver ikke opdateret selvomom jeg loader en ny fil op til serveren ?!?!
og den anden, der skal hedde check_Temp_to_net.asp:
<%@ Language=VBScript %> <% lastModified = Cdate(Request.QueryString("lastModified")) fileURL = "Temp_to_net.txt" set oFso = createobject("scripting.filesystemobject") set theFile = oFso.getfile(server.mappath(fileURL)) theDate = theFile.datelastmodified set theFile = nothing set theFile = oFso.opentextfile(server.mappath(fileURL),1,False) theContent = theFile.ReadAll set theFile = nothing set oFso = nothing
theLocation = Request.ServerVariables("SCRIPT_NAME") if lastModified <> "" then theLocation = theLocation & "?lastModified=" & Server.URLEncode(lastModified)
doUpdate = (lastModified <> theDate)
%> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <script language=JavaScript> function checkAndReload(){ var d = parent.document; var oDiv = d.all.div_Temp_to_net; if (<%=lcase(doUpdate)%>) oDiv.innerHTML = document.forms[0].theContent.value; t = window.setTimeout("window.location = '<%=theLocation%>'", 2000) } </script>
SÅ SPILLER DET, 1000 TAK for hjælpen. Der er faktisk html kode i txt filen, men det har den ikke noget imod, den viser det som den skal.
Jeg har et ønske mere, som jeg er villig til at betale 200 point mere for.
Jeg vil gerne have den til at tjekke txt filen hvert 15. min, og det kan jeg jo nu (FEDT).
MEN kan man lave det lidt mere smart:
Som det er nu, loader den jo bare "blindt" hvert X ms, og tager ikke hensyn til noget andet. Min txt fil bliver loadet op til serveren hvert 15 min. Og jeg kunne godt tænke mig en timer på siden med Min. og Sec. som viser hvornår siden reloades næste gang. Men hvis disse to tider er uden af sync. bliver det jo ikke særligt præsist. Kan man lave et eller andet med at den kigger på tiden på txt filen og trækker fra de 15 min til næste reload og viser det som et ur/timer på skærmen(det vil jo faktisk kun være første gang dette skal gøres da de to tider jo herefter vil være i sync.) Når man går ind på siden skal den seneste data selvfølgelig læses lige som nu uanset tiden, først herefter skal der kigges på tiden.
Det ville være FEDT hvis dette kunne lade sig gøre, men andre forslag modtages også
Her er den så, med forklarende noter. Den finder filens "alder", og reloader x minutter derefter (UpdateFrequency).
Hvis filen ikke fornys som planlagt vil siden reloade heletiden, derfor skal du bestemme hvor ofte der højst må checkkes (MinimumUpdateFrequency).
Disse to tal, samt filens placering (FileURL), angiver du i koden
<%@ Language=VBScript %> <% 'Filens placering, fx. "/mappe/fil.txt" eller "../mappe/fil.txt" eller "fil.txt" FileURL = "Temp_to_net.txt"
'Opdateringsfrekvens, siden opdateres dette antal minutter efter filens "Last Modified" UpdateFrequency = 15
'Hvis filen ikke er optateret forsøges igen efter dette antal minutter MinimumUpdateFrequency = 2
'------------------------------------------- 'Ret ikke noget herunder
'Filsystemet åbnes set oFso = createobject("Scripting.FileSystemObject")
'Lats Modified findes set theFile = oFso.getfile(Server.MapPath(FileURL)) LastModified = theFile.DateLastModified set theFile = nothing
'Tid til næste opdatering findes TimeToNextUpdate = UpdateFrequency - DateDiff("n", LastModified, Now()) if TimeToNextUpdate < MinimumUpdateFrequency then TimeToNextUpdate = MinimumUpdateFrequency
'Filens indhold findes set theFile = oFso.OpenTextFile(Server.MapPath(FileURL),1,False) theContent = theFile.ReadAll
'Oprydning set theFile = nothing set oFso = nothing
%> <HTML>
<HEAD>
<script language=JavaScript> function checkAndReload(){ if (self != parent){ var d = parent.document; var oDiv = d.all.div_Temp_to_net; if (oDiv != undefined) oDiv.innerHTML = document.forms[0].theContent.value; }else{ alert("Denne side skal ligge i en iFrame"); } t = window.setTimeout("window.location = '<%=Request.ServerVariables("SCRIPT_NAME")%>'", <%=TimeToNextUpdate%>*60*1000) } </script>
Det spiller, men du har lige "glemt" en ting, jeg skrev at den tid der var tilbage til næste opdatering skulle vises som en nedtælling med Min. og Sec. på den side hvor "VI" viser txt filen, kan du lave dette også, så skulle det hele være perfect.
<%@ Language=VBScript %> <% 'Filens placering, fx. "/mappe/fil.txt" eller "../mappe/fil.txt" eller "fil.txt" FileURL = "Temp_to_net.txt"
'Opdateringsfrekvens, siden opdateres dette antal minutter efter filens "Last Modified" UpdateFrequency = 15
'Hvis filen ikke er optateret forsøges igen efter dette antal minutter MinimumUpdateFrequency = 1
'------------------------------------------- 'Ret ikke noget herunder
'Filsystemet åbnes set oFso = createobject("Scripting.FileSystemObject")
'Lats Modified findes set theFile = oFso.getfile(Server.MapPath(FileURL)) LastModified = theFile.DateLastModified set theFile = nothing
'Tid til næste opdatering findes TimeToNextUpdate = UpdateFrequency - DateDiff("n", LastModified, Now()) if TimeToNextUpdate < MinimumUpdateFrequency then TimeToNextUpdate = MinimumUpdateFrequency
'Filens indhold findes set theFile = oFso.OpenTextFile(Server.MapPath(FileURL),1,False) theContent = theFile.ReadAll
'Oprydning set theFile = nothing set oFso = nothing
%> <HTML>
<HEAD>
<script language=JavaScript> var t, d; function checkAndReload(){ if (self != parent){ d = parent.document; var oDiv = d.all.div_Temp_to_net; if (oDiv != undefined) oDiv.innerHTML = document.forms[0].theContent.value; }else{ alert("Denne side skal ligge i en iFrame"); } startCountDown(<%=TimeToNextUpdate%>*60*1000); }
var interval = 1000 function startCountDown(iMilliSeconds){ showTime(iMilliSeconds); iMilliSeconds -= interval; if (iMilliSeconds <= 0) window.location = "<%=Request.ServerVariables("SCRIPT_NAME")%>"; t = window.setTimeout("startCountDown("+ iMilliSeconds + ")", interval); }
Jamen tak for det, det var en fornøjelse. Sikkert noget jeg selv kan bruge en dag
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.