Avatar billede christian_h Nybegynder
08. juni 2004 - 10:43 Der 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.

Mvh.

Christian_h
Avatar billede ldanielsen Nybegynder
08. juni 2004 - 10:48 #1
Kan du lave ASP?
Avatar billede christian_h Nybegynder
08. juni 2004 - 11:03 #2
Nej det kan jeg ikke, men serveren kan køre det, så hvis du kan lave noget COOL i ASP, er jeg villig til at kigge på det :-)
Avatar billede ldanielsen Nybegynder
08. juni 2004 - 11:16 #3
Det kan jeg godt lave

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.

Man kunne lægge den i en iframe, evt usynlig.

Hvordan viser du filens indhold frem?
Avatar billede christian_h Nybegynder
08. juni 2004 - 11:37 #4
Siden ser således ud, kan du ikke lave så der tjekkes hvert 5. min, det check vil vel kun blive lavet, hvis der én der kigge på siden ikke ??

<html>
<head>
<title>
test
</title>
</head>
<body>


<center>

<script type="text/javascript" src="Temp_to_net.txt"></script>

</body>

</html>
Avatar billede ldanielsen Nybegynder
08. juni 2004 - 12:41 #5
jo

<html>
<head>
<title>
test
</title>
</head>
<body>
<center>
<div id=div_Temp_to_net></div>
<iFrame src="check_Temp_to_net.asp" height=0 width=0 border=0></iFrame>
</body>
</html>

og 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>

</HEAD>

<body onLoad="checkAndReload()">
<form>
<input type=hidden name=theContent value="<%=theContent%>">
</form>
</body>
</html>
Avatar billede ldanielsen Nybegynder
08. juni 2004 - 12:42 #6
t = window.setTimeout("window.location = '<%=theLocation%>'", 2000)

sætter frekvensen, i millisekunder, så denne checkker hvert andet sekund (2000 ms)

5 min?:
t = window.setTimeout("window.location = '<%=theLocation%>'", 5*60*1000)
Avatar billede ldanielsen Nybegynder
08. juni 2004 - 12:43 #7
du kan evt få problemer med adgangstilladelser, man det kan sikkert løses
Avatar billede christian_h Nybegynder
08. juni 2004 - 12:55 #8
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 ?)

<html>
<head>
<title>
test
</title>
</head>
<body>
<center>
<div id=div_Temp_to_net></div>
<iFrame src="check_Temp_to_net.asp" height=0 width=0 border=0></iFrame>
</body>
</html>
Avatar billede ldanielsen Nybegynder
08. juni 2004 - 14:04 #9
check_Temp_to_net.asp skal selvfølgelig ligge i samme mappe som ovenstående.

prøv dette:
<iFrame src="check_Temp_to_net.asp" height=500 width=500 border=0></iFrame>

så kan du nemlig se hvad der sker
Avatar billede christian_h Nybegynder
08. juni 2004 - 14:18 #10
Er det denne del jeg skal kalde for at se noget ?

<html>
<head>
<title>
test
</title>
</head>
<body>
<center>
<div id=div_Temp_to_net></div>
<iFrame src="check_Temp_to_net.asp" height=500 width=500 border=0></iFrame>
</body>
</html>
Avatar billede christian_h Nybegynder
08. juni 2004 - 14:22 #11
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 ?!?!
Avatar billede ldanielsen Nybegynder
08. juni 2004 - 14:36 #12
Hvis du bruger de to filer jeg har sendt, og de ligger i samme mappe som Temp_to_net.txt, så skulle du enten se noget, eller få en fejlmelding.

Det er vel ikke html der er i Temp_to_net.txt?

Brug t = window.setTimeout("window.location = '<%=theLocation%>'", 2000)
i check_Temp_to_net.asp, så den opdaterer hvert andet sek.

Der er vel ikke en javascript-fejl?

Gå ind i browserens indstillinger og Vælg "Vis meddelelse om alle scriptfejl"
Avatar billede christian_h Nybegynder
08. juni 2004 - 16:49 #13
Jeg får en fejl når jeg "kører" "Temp_To_Net.asp"

Fejlen siger:

Linje: 9
Tegn: 15
Fejl 'undefined' er null eller ikke et objekt
kode: 0

Så jeg kan stadig ikke få det til at spille.
Avatar billede ldanielsen Nybegynder
09. juni 2004 - 07:14 #14
får du den fejl når du kører den i iframen, eller når du kører den "alene"

Den kan kun køre i en iframe, for scriptet henviser til parent.document.all.div_Temp_to_net, så den skal eksistere.

Kør den i iFramen, med height=500 width=500 border=1, se om fejlen kommer.

Højerklik i iframen, vælg vis kilde og post resultatet her, sammen med fejlen.

Det virker hos mig!
Avatar billede christian_h Nybegynder
09. juni 2004 - 13:28 #15
Hejsa.

Nu kan det godt være at det er mig der er dum, men jeg ANER ikke hvad en iframe er for noget, kan du ikke maile mig HELE projektet ?.

Til heli@c.dk

Så ville jeg blive MEGET glas.

Mvh.

Christian_h
Avatar billede ldanielsen Nybegynder
09. juni 2004 - 13:45 #16
Jo!

Der skal være tre filer, og de SKAL ligge i den samme mappe (indtil videre) Her er den første, vi kan kalde den test.htm:

<html>
<head>
<title>
test
</title>
</head>
<body>
<center>
<div id=div_Temp_to_net></div>
<iFrame src="check_Temp_to_net.asp" height=0 width=0 border=0></iFrame>
</body>
</html>


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>

</HEAD>

<body onLoad="checkAndReload()">
<form>
<input type=hidden name=theContent value="<%=theContent%>">
</form>
</body>
</html>

Og endelig tekstfilen der skal hedde Temp_to_net.txt. Den har du jo selv(?) ellers laver du den bare, og du kan jo skrive "hejsa" i den.

Den "virkelige" Temp_to_net.txt, hvad er der i den? HTML eller hvad?
Avatar billede christian_h Nybegynder
09. juni 2004 - 16:55 #17
Hej ldanielsen

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å
Avatar billede ldanielsen Nybegynder
09. juni 2004 - 17:06 #18
det kunne man godt.

Det vil jeg kigge på, men jeg har ikke tid i dag.
Avatar billede christian_h Nybegynder
09. juni 2004 - 17:15 #19
FEDT, jeg venter med spænding.

Mvh.

Christian_h
Avatar billede ldanielsen Nybegynder
10. juni 2004 - 09:51 #20
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>

    </HEAD>

    <body onLoad="checkAndReload()">
        <form>
            <input type=hidden name=theContent value="<%=theContent%>">
        </form>
    </body>
   
</html>
Avatar billede christian_h Nybegynder
10. juni 2004 - 13:21 #21
Hej igen.

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.

Mvh.

Christian
Avatar billede ldanielsen Nybegynder
10. juni 2004 - 23:38 #22
OK så.

selve siden har blot fået tilføjet en div, countDown, til at vise nedtællingen i:

<html>
<head>
<title>
test
</title>
</head>
<body>
<center>
<div id=div_Temp_to_net></div>
<div id=countDown></div>
<iFrame src="check_Temp_to_net.asp" height=0 width=0 border=0></iFrame>
</body>
</html>


i ASP'en har jeg kun lavet om på javascriptet:

<%@ 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);           
            }
       
        function showTime(iMilliSeconds){
            iMinutes = Math.floor(iMilliSeconds/60000);
            iSeconds = iMilliSeconds/60000 - iMinutes;
            iSeconds = Math.round(iSeconds*60);
            stSeconds = (iSeconds < 10) ? "0" + iSeconds : "" + iSeconds;
            d.all.countDown.innerHTML = iMinutes + ":" + stSeconds;
            }
       
    </script>

    </HEAD>

    <body onLoad="checkAndReload()">
        <form>
            <input type=hidden name=theContent value="<%=theContent%>">
        </form>
    </body>
   
</html>
Avatar billede christian_h Nybegynder
14. juni 2004 - 13:09 #23
Hej ldanielsen.

Nu spiller det hele bare PERFEKT, hvis du giver et svar tildeler jeg dig dine point.

Jeg opretter også et nyt spørgsmål, som hedder "Point til ldanielsen", svar på dette også, så du kan få tildelt de sidste point der.

TAK for hjælpen, det var kanon.

Mvh.

Christian_h
Avatar billede ldanielsen Nybegynder
14. juni 2004 - 14:44 #24
Jamen tak for det, det var en fornøjelse. Sikkert noget jeg selv kan bruge en dag
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester