25. juni 2007 - 13:03
Der er
44 kommentarer og 1 løsning
side kan ikke vises 404
Jeg har et ret så stort problem. Jeg opdaterer en side på følgende måde <script type="text/javascript"> var max = ETTAL,num; function opdaterVindue(){ try{ num = location.search.split("side=")[1]; if(num.indexOf(";")>0) num = num.split(";")[0]; num = ++num; }catch(e){ num = 0; } location.href = '/MINSIDE?side=' + num%max; } window.onload = function(){setTimeout("opdaterVindue()",15000);}; </script> Mit problem er bare at det tilsynelande kikser og jeg får siden kan ikke vises. Hvordan kalder jeg siden igen når det sker?
Annonceindlæg fra Cornerstones
Jeg skulle meget gerne have den til at reloade siden, når det sker
Det tyder på at din side er i et subdir. Med "/" refererer du til dit root-dir. Prøv at fjerne "/" i "/MINSIDE........."
Vil det bevirke at hvis siden ikke kan vises så bliver den alligevel kaldt igen??
Det jeg gerne vil have er at i det tilfælde den side der bliver redirected til ikke kan vises så skal siden alligevel kaldes igen.
<ole> Det kan du ikke uden videre. Du må finde ud af, hvorfor din opdatering kikser og så handle på det i stedet =) /mvh </bole>
Det som jeg rigtigt gerne vil er lige som at smage på den side jeg redirecter til findes
hvis den så ikke findes skal der ikke redirectes
Det må vel være noget i den her retning var client = new XMLHttpRequest(); client.open("GET", "test.txt", true); client.send(); client.onreadystatechange = function() { if(this.readyState == 3) { MINSIDE?side=' + num%max; } }
Ville det være forkert at skrive client.open("GET", "den_side_jeg_gerne_vil_redirecte_til_hvis_den_ellers_er_oppe.html", true); if(this.readyState == 2) { location.href = '/MINSIDE?side=' + num%max; }
25. juni 2007 - 15:50
#10
Du kan kun bruge XMLHttpRequests, hvis den anden side ligger under samme domæne - men i så fald bør du spørge på status-property'en. Ligger begge dokumenter under samme domæne?
25. juni 2007 - 15:59
#11
ja det gør de
25. juni 2007 - 15:59
#12
det er faktisk den samme side bare med nogle andre parametre
25. juni 2007 - 16:29
#13
Er det noget i den her retning jeg skal ud i. Hvor jeg så location.href = '/MINSIDE?side=' + num%max; hvis jeg får status 200 på den næste side. Det hele handler om at siden ikke skal reloades før siden er til rådighed og det skal den så teste på hver 15 sek. var req; function loadXMLDoc(url) { // branch for native XMLHttpRequest object if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.onreadystatechange = processReqChange; req.open("GET", url, true); req.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { req.onreadystatechange = processReqChange; req.open("GET", url, true); req.send(); } } } function processReqChange() { // only if req shows "complete" if (req.readyState == 4) { // only if "OK" if (req.status == 200) { // ...processing statements go here... } else { alert("There was a problem retrieving the XML data:\n" + req.statusText); } } }
25. juni 2007 - 16:50
#14
Kan jeg smide urlen med her req.onreadystatechange = processReqChange(urlen); function processReqChange(urlen) if (req.status == 200) { } else
25. juni 2007 - 22:01
#15
Løsningen er sikkert himmelråbende enkel. Jeg kan bare ikke se det. Logikken skal være. Se om du får status 200 hvis du reloader siden (det er jo bare den samme side) Hvis du gør så reload siden med de nye parametre Hvis du ikke gør så kald alligevel opdaterVindue og prøv igen
25. juni 2007 - 22:06
#16
req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { req.onreadystatechange; req.open("GET", url, true); req.send(); } if (req.readyState == 4) { // only if "OK" if (req.status == 200) { window.onload = function(){setTimeout("opdaterVindue()",15000);}; } else { alert("There was a problem retrieving the XML data:\n" + req.statusText); } }
25. juni 2007 - 22:07
#17
er det helt skævt :-(
26. juni 2007 - 08:47
#18
HJÆLP!!!!
Hvorfor er det her forkert
function opdaterVindue(){
try{
num = location.search.split("sidenr=")[1];
if(num.indexOf(";")>0)
num = num.split(";")[0];
num = ++num;
}catch(e){
num = 0;
}
location.href = 'MINURL' + num%max;
}
function testTil(){
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.open("GET", "
http://MITDOM/" , true);
req.send();
}
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
window.onload = function(){setTimeout("opdaterVindue()",15000);};
} else {
testTil();
}
}
}
26. juni 2007 - 11:47
#19
Værdien 4 får readyState-property'en, når siden er helt færdig-loaded. Hvis readyState er 4, mon så status kan være andet end 200? Tjek din if/else ;o)
26. juni 2007 - 14:14
#20
Jeg har droppet readyState. Er vel bare interesseret i at vide om jeg for status 200 tilbage. Jeg fandt ud af at readyState var 1
26. juni 2007 - 14:42
#21
og status er 200
26. juni 2007 - 14:47
#22
Er det her tættere på <head> <script type="text/javascript"> var max = ETTAL,num; function opdaterVindueOgReload(){ try{ num = location.search.split("sidenr=")[1]; if(num.indexOf(";")>0) num = num.split(";")[0]; num = ++num; }catch(e){ num = 0; } location.href = 'MINURL' + num%max; } var req=false; if (window.XMLHttpRequest) { // Mozilla, Safari, IE7.0+ ... req = new XMLHttpRequest(); } if (req) { req.open("GET", "MINURL", true); req.send(); } // only if "OK" if (req.status == 200) { window.onload = function(){setTimeout("opdaterVindueOgReload()",15000);}; } else { alert("side nede"); } </script> </head>
26. juni 2007 - 14:53
#23
Den accepterer ikke req.status i IE7 men det virker i mozilla. Altså den side af sagen
26. juni 2007 - 15:12
#24
27. juni 2007 - 08:50
#25
Jeg er kommet frem til det her. Hvordan slipper jeg afsted med at kalde testTil(); første gang siden bliver kaldt så den bliver sat igang function testTil(){ var reg = null; req = new ActiveXObject("MSXML2.XMLHTTP.3.0"); if (req) { req.open("GET", "MITDOM", false); req.send(); if (req.status == 200) { window.onload = function(){setTimeout("opdaterVindueOgReload()",15000);}; } else { testTil(); } } }
27. juni 2007 - 10:01
#26
Jeg kan vist bare kalde scriptet i body <script>testTil();</script>
27. juni 2007 - 10:35
#27
Ellers kan du bare skrive: function testTil(){ var reg = null; req = new ActiveXObject("MSXML2.XMLHTTP.3.0"); if (req) { req.open("GET", "MITDOM", false); req.send(); if (req.status == 200) { window.onload = function(){setTimeout("opdaterVindueOgReload()",15000);}; } else { testTil(); } } } testTil(); - så kalder du funktionen, så snart browseren har læst den - og dermed så snart, funktionen kan kaldes. Det burde være helt fint =)
27. juni 2007 - 10:56
#28
Det er godt nok et møj problem. Det her løser kun en del af problemstillingen. Hvad gør jeg hvis serveren slet ikke svarer. Hvis den foreksempel er ved at bliver genstartet.
27. juni 2007 - 10:57
#29
Scriptet skulle meget gerne bare køre videre og vente på den er oppe igen
27. juni 2007 - 11:44
#30
kan det overhovedet lade sig gøre?
27. juni 2007 - 12:24
#31
Jamen, gør det da ikke det? Hvis ikke, hvad returneres så, hvis du i stedet for: if (req.status == 200) { ... osv ... - skriver: alert(req.status)
27. juni 2007 - 13:26
#32
Problemet er at jeg kalder en side på serveren når den ikke er oppe
27. juni 2007 - 13:27
#33
Jeg er alvorlig bange for at jeg har grebet det helt forkert an :-(
27. juni 2007 - 14:18
#34
Jeg forstår det bare ikke. Hele ideen med scriptet var jo netopt at undgå det. Det troede jeg faktisk jeg gjorde med if (req.status == 200) { window.onload = function(){setTimeout("opdaterVindueOgReload()",15000);}; }
27. juni 2007 - 14:21
#35
Jeg troede at logikken var send et request til req.open("GET", "MITDOM/enfil.jsp", false); req.send(); hvis reg er 200 så kald siden ellers så prøv igen
27. juni 2007 - 14:25
#36
det virker som om at
27. juni 2007 - 14:28
#37
Ja det kunne vel også bare være "MITDOM". Kan man ikke lave noget hvis reg.open fejler så sæt reg.status til et eller andet?
27. juni 2007 - 14:51
#38
Hvis du skriver: req.open("GET", "MITDOM", false); - og ikke ændrer "MITDOM" til en eksisterende adresse, må du vel få en fejl. En fjl kan du altid fange i en try/catch: try { req.open("GET", "MITDOM", false); req.send(); } catch(e) { setTimeout(...........); } - og så bare drop alt om status
27. juni 2007 - 15:42
#39
Burde jeg så ikke kunne gøre sådan try { req.open("GET", "MITDOM", false); req.send(); if (req.status == 200) { window.onload = function(){setTimeout("opdaterVindueOgReload()",1000);}; } } catch(e) { alert("kastet"); setTimeout("testTil()",5000); }
27. juni 2007 - 15:44
#40
også i det tilfælde forvente at den bare bliver ved med at kalde testTil() indtil jeg MITDOM om man så må sige er tilgængeligt
28. juni 2007 - 13:15
#41
Jo ... hvad sker der?
29. juni 2007 - 08:20
#42
Når siden er nede kalder den alligevel MITDOM og timer så ud
29. juni 2007 - 13:40
#43
- og du får ikke en alert, der siger 'kastet'?
24. juli 2007 - 15:05
#44
Det lykkes at løse problemet ved at kalde fra en anden side og så vise det i en IFRAME, ellers sådan noget.
24. juli 2007 - 15:05
#45
tak for interessen :-)
Vi tilbyder markedets bedste kurser inden for webudvikling