Avatar billede larsen1 Nybegynder
28. marts 2007 - 15:59 Der er 6 kommentarer og
1 løsning

Bruge Ajax til at refreshe side.

Jeg har en rimeligt tung side med 2-3 flashelementer. Den skal nogle gange opdatere/refreshe automatisk, alt efter nogle omstændigheder, fordi så skal flash-filerne skiftes ud med andre.

Nu har jeg leget lidt med ajax-eksempler (XMLHTTPRequest), og fundet ud af at i stedet for at reloade hele siden, kan jeg lave en lille ajax-fil som checker om det er tid til at opdatere siden.
Så langt, så godt, men hvordan aktiverer jeg et refresh-javascript igennem sådan en XMLHTTPRequest?

Er det overhovedet til at forstå?
Avatar billede roenving Novice
28. marts 2007 - 16:09 #1
Hvem, hvad, hvornår vil du refreshe, og hvorfor kører requesten lige pludselig ?-)
Avatar billede larsen1 Nybegynder
28. marts 2007 - 16:11 #2
Altså min kode er:
selve html-siden:

<script src="gamewindow.js"></script>
AJAX : <a href="#" onclick="showGame(<%= session("game") %>)">Check</a><br>
<div id="Updtxt">Ajax response appears here</div>

Gamewindow.js ser således ud:

var xmlHttp
function showGame(gameid)
{
  xmlHttp=GetXmlHttpObject();
  if (xmlHttp==null)
    {
    alert ("Your browser does not support AJAX!");
    return;
    }
  var url="refreshheck.asp";
  url=url+"?game="+gameid;
  url=url+"&sid="+Math.random();
  xmlHttp.onreadystatechange=stateChanged;
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}
function stateChanged()
{
  if (xmlHttp.readyState==4)
  {
  document.getElementById("Updtxt").innerHTML=xmlHttp.responseText;
  }
}
function GetXmlHttpObject()
{
  var xmlHttp=null;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
    catch (e)
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
  return xmlHttp;
}


Og endelig en refreshheck.asp side:
<%
if klar > 0 then
  %>Indsæt noget der refresher nu<%
else
  %>Wait for it....<%
end if
%>
Avatar billede larsen1 Nybegynder
28. marts 2007 - 16:12 #3
refreshheck.asp er altså en lille asp-fil der kun checker om "hovedsiden" skal refreshe....
Avatar billede roenving Novice
28. marts 2007 - 16:23 #4
Måske:

function stateChanged(){
  if (xmlHttp.readyState==4){
    if(xmlHttp.responseText.indexOf("Update Now")==0)
      location.reload(true);
    document.getElementById("Updtxt").firstChild.nodeValue = xmlHttp.responseText;
  }
}

<%
if klar > 0 then
  %>Update Now<%
else
  %>Wait for it....<%
end if
%>
Avatar billede larsen1 Nybegynder
28. marts 2007 - 17:34 #5
Det er intet mindre end perfekt!
Jeg havde dog nok lidt overflødig whitespace, så jeg lavede sætningen om til

if(xmlHttp.responseText.indexOf("Update Now")>-1)

Så fungerer det upåklageligt....
Tak for hjælpen - læg et svar, så får du bling-bling-point
Avatar billede roenving Novice
28. marts 2007 - 17:37 #6
Velbekomme '-)
Avatar billede roenving Novice
28. marts 2007 - 18:00 #7
-- og tak for point ;~}
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