Avatar billede mikmakmuk Nybegynder
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?
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 13:10 #1
Jeg skulle meget gerne have den til at reloade siden, når det sker
Avatar billede sherlock Nybegynder
25. juni 2007 - 13:11 #2
Det tyder på at din side er i et subdir. Med "/" refererer du til dit root-dir.
Prøv at fjerne "/" i "/MINSIDE........."
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 13:49 #3
Vil det bevirke at hvis siden ikke kan vises så bliver den alligevel kaldt igen??
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 14:07 #4
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.
Avatar billede olebole Juniormester
25. juni 2007 - 15:29 #5
<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>
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 15:40 #6
Det som jeg rigtigt gerne vil er lige som at smage på den side jeg redirecter til findes
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 15:40 #7
hvis den så ikke findes skal der ikke redirectes
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 15:42 #8
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;
}
}
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 15:48 #9
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;
}
Avatar billede olebole Juniormester
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?
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 15:59 #11
ja det gør de
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 15:59 #12
det er faktisk den samme side bare med nogle andre parametre
Avatar billede mikmakmuk Nybegynder
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);
        }
    }
}
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 16:50 #14
Kan jeg smide urlen med her req.onreadystatechange = processReqChange(urlen);

function processReqChange(urlen)

if (req.status == 200) {
           
        } else
Avatar billede mikmakmuk Nybegynder
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
Avatar billede mikmakmuk Nybegynder
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);
        }
    }
Avatar billede mikmakmuk Nybegynder
25. juni 2007 - 22:07 #17
er det helt skævt :-(
Avatar billede mikmakmuk Nybegynder
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();
        }
    }
}
Avatar billede olebole Juniormester
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)
Avatar billede mikmakmuk Nybegynder
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
Avatar billede mikmakmuk Nybegynder
26. juni 2007 - 14:42 #21
og status er 200
Avatar billede mikmakmuk Nybegynder
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>
Avatar billede mikmakmuk Nybegynder
26. juni 2007 - 14:53 #23
Den accepterer ikke req.status i IE7 men det virker i mozilla. Altså den side af sagen
Avatar billede olebole Juniormester
26. juni 2007 - 15:12 #24
Jo, det gør IE7:
    http://msdn2.microsoft.com/en-us/library/ms535874.aspx
    http://msdn2.microsoft.com/en-us/library/ms534650.aspx

- og værdierne kan du se her:
    http://msdn2.microsoft.com/en-us/library/ms767625.aspx

Prøv at alert'e status-property'en i stedet for if-sætningen. Hvad får du ud af det?  =)
Avatar billede mikmakmuk Nybegynder
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();
                }
        }
}
Avatar billede mikmakmuk Nybegynder
27. juni 2007 - 10:01 #26
Jeg kan vist bare kalde scriptet i body
<script>testTil();</script>
Avatar billede olebole Juniormester
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  =)
Avatar billede mikmakmuk Nybegynder
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.
Avatar billede mikmakmuk Nybegynder
27. juni 2007 - 10:57 #29
Scriptet skulle meget gerne bare køre videre og vente på den er oppe igen
Avatar billede mikmakmuk Nybegynder
27. juni 2007 - 11:44 #30
kan det overhovedet lade sig gøre?
Avatar billede olebole Juniormester
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)
Avatar billede mikmakmuk Nybegynder
27. juni 2007 - 13:26 #32
Problemet er at jeg kalder en side på serveren når den ikke er oppe
Avatar billede mikmakmuk Nybegynder
27. juni 2007 - 13:27 #33
Jeg er alvorlig bange for at jeg har grebet det helt forkert an :-(
Avatar billede mikmakmuk Nybegynder
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);};
                }
Avatar billede mikmakmuk Nybegynder
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
Avatar billede mikmakmuk Nybegynder
27. juni 2007 - 14:25 #36
det virker som om at
Avatar billede mikmakmuk Nybegynder
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?
Avatar billede olebole Juniormester
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
Avatar billede mikmakmuk Nybegynder
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);
            }
Avatar billede mikmakmuk Nybegynder
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
Avatar billede olebole Juniormester
28. juni 2007 - 13:15 #41
Jo ... hvad sker der?
Avatar billede mikmakmuk Nybegynder
29. juni 2007 - 08:20 #42
Når siden er nede kalder den alligevel MITDOM og timer så ud
Avatar billede olebole Juniormester
29. juni 2007 - 13:40 #43
- og du får ikke en alert, der siger 'kastet'?
Avatar billede mikmakmuk Nybegynder
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.
Avatar billede mikmakmuk Nybegynder
24. juli 2007 - 15:05 #45
tak for interessen :-)
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