Avatar billede mishrah Nybegynder
31. marts 2009 - 21:36 Der er 7 kommentarer og
1 løsning

Tjek at en server ikke er nede - evt. Ajax?

Hej gutter,

Jeg er igang med et slideshow system der kører direkte på nettet i en browser. Jeg kan desværre ikke komme udenom at vi henter alt indhold direkte fra en server og altså ikke har mulighed for at cache eller lignende.

Slideshowet er en alm. webside, der efter x antal sekunder (Der tælles ned via javascipt) loader næste slide i rækken (Dette hentes via en database - ASP)
Problemet er, at serveren jo kan risikere at være midt i en IIS-RESET hvilket sker hver nat omkring kl 4. I det tilfælde vil der blive vist en "Service Unavailable" besked og slideshowet stopper så.

Min idé er at når x antal sekunder er gået og vi skal til at lave en window.location.href='NÆSTE SLIDE', så vil jeg lige først lave en forespørgsel til serveren for at sikre mig, at den ikke er nede eller midt i et reset. Hvis ikke jeg kan loade en testside på serveren, så vil jeg give den 60sekunder før jeg prøver igen.

Jeg har det hele på plads, men mangler blot en clientside javascript metode til at checke at en side eksisterer og loades korrekt. Altså noget lignende:

function nextSlide() {
if (loadTest(www.test.com)==true) {window.location.href='www.test.com'}
else
{setTimeout('nextSlide();',3600);}
}

Det er altså en slags loadTest jeg mangler.

Al hjælp vil blive påskønnet.

På forhånd tak,
Martin
Avatar billede jhe-ting Nybegynder
31. marts 2009 - 23:46 #1
Prøv med en HTTP HEAD request.

Se evt:

    http://www.jibbering.com/2002/4/httprequest.html
eller
    https://developer.mozilla.org/En/AJAX/Getting_Started


for en forklaring om at foretage en HTTP-Requiest med XMLHTTPRequest objektet.
Avatar billede olebole Juniormester
01. april 2009 - 00:19 #2
<ole>

<script type="text/javascript"> // XMLHttpRequest wrapper - http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php
(function(){if(window.XMLHttpRequest)return;var o=null,s,a=["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}catch(e){}}window.XMLHttpRequest=o?function(){return new ActiveXObject(s)}:null;o=null})();

function checkServer() {
    var oHttp = new XMLHttpRequest();
    oHttp.open("head", "http://www.domain.dk/", true);
    oHttp.onreadystatechange = function() {
        if (oHttp.readyState<4) return;
        if (oHttp.status==200) alert("Sitet er oppe");
        else alert("Sitet er nede");
        oHttp = null;
    }
    oHttp.send(null);
}
</script>

<p><button onclick="checkServer()">TEST</button></p>

/mvh
</bole>
Avatar billede mishrah Nybegynder
01. april 2009 - 02:11 #3
Hej OleBole - den er købt :)

Fik faktisk lavet en løsning med en iframe der loader en testside på serveren. Hvis jeg så ikke kan finde et specifikt element, returnerer jeg fejl og venter 60sekunder med at prøve igen. Din løsning er dog mere elegant og mere optimeret :)

Skriv et svar, så er pointene dine.
Og ikke mindst, et stort tak for hjælpen!

Med venlig hilsen
Martin
Avatar billede olebole Juniormester
01. april 2009 - 09:24 #4
Man kan faktisk også:

var oTest = new Image();
oTest.onerror = function(){
    alert("Server nede")
}
oTest.onload = function(){
    alert("Server oppe")
}
oTest.src = "http://domain.dk/fil.jpg";
Avatar billede mishrah Nybegynder
01. april 2009 - 10:34 #5
Den er faktisk også god.
Endte med at beholde den med iframen, alligevel, da den ikke er afhængig af et activeX objekt så jeg har en idé om at der er mindre change for den går galt :)

Det med billedet er dog ENDNU bedre, så den implementerer jeg lige med det samme :) Jo færre linie kode, jo bedre :)
Avatar billede olebole Juniormester
01. april 2009 - 11:05 #6
Herligt  ;o)
Avatar billede mishrah Nybegynder
03. april 2009 - 22:46 #7
Hej igen Ole,

Jeg håber du læser dette :)
Din fine løsning med load af et billede, har jeg implementeret her til aften, men den virker lige lidt for godt....
Selvom jeg fjerner billedet igen, så fejler den ikke :)
onError bliver altså aldrig kaldt, da den sansynligvis henter billedet fra cachen... Jeg har alt med pragma og lign. på alle siderne og alligevel fejler den ikke, selvom jeg har slettet det billede den tjekker på.

Nogen idéer?

På forhånd tak :)
Avatar billede olebole Juniormester
03. april 2009 - 22:59 #8
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

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