Avatar billede dramsgaard Nybegynder
03. marts 2011 - 22:06 Der er 4 kommentarer og
1 løsning

AJAX og xmlhttp.readyStatus

Jeg har et problem med at få nedenstående script til at virke.
Jeg kan se, at xmlhttp.status hele tiden er 'undefined' af en eller anden grund. Jeg kan kun få det til at virke ved at fjerne xmlhttp.status==200.
Hvad er der galt med scriptet?
Hvorfor er xmlhttp.status undefined, og hvor vigtigt er der at teste for om den er = 200 i scriptet?

function GetAjaxData(str)
{
var xmlhttp;
if (str=="")
  {
  document.getElementById("kalender").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()

  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("kalender").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","ajax.asp?id="+str,true);
xmlhttp.send();
}
Avatar billede olebole Juniormester
05. marts 2011 - 17:33 #1
<ole>

Vis altid den kode, du faktisk bruger. Den, du viser mangler en 'Tuborg' ved din onreadystate handler - og det må resultere i en JS-fejl, så snart dokumentet loades  ;o)

Hvad sker der, hvis du (i den rigtige kode) skriver:


  if (xmlhttp.readyState==4)
    {
    alert(xmlhttp.status);
    document.getElementById("kalender").innerHTML=xmlhttp.responseText;
    }
  }



/mvh
</bole>
Avatar billede olebole Juniormester
05. marts 2011 - 17:35 #2
- og husk i øvrigt altid at bruge POST i stedet for GET, når du forsøger dig med Ajax. Ellers cacher IE dine requests - i stedet for at hente dem fra serveren hver gang
Avatar billede dramsgaard Nybegynder
06. marts 2011 - 15:07 #3
tak for svar

Det var også den kode jeg brugte på det tidspunkt - i mit forsøg på at finde en løsning, havde jeg bare kommet til at slette lidt for meget i scriptet som jeg endte med at kopiere ind her. Jeg har fået det til at virke, men ved faktisk ikke hvad der var galt.

Tilgengæld har jeg fået nogle andre problemer med JS fejl pga Ajax (tror jeg) - men vil oprette et nyt spg vedr det.

mht til cache har jeg hørt, at man kan sætte 'Math.random();' ind i URL'en - så skulle det ikke give problemer.
Avatar billede olebole Juniormester
06. marts 2011 - 16:53 #4
Ja, der findes næsten altid lappeløsninger, hvis man insisterer på mindre gode metoder. Man kan sagtens jonglere lidt med query strengen, så den altid er unik, og dermed forhindrer IE i at cache. I den forbindelse er et timestamp dog bedre, da Math.random() som bekendt ikke returnerer et tilfældigt tal, men et 'pseudo tilfældigt' tal. Der er ingen garanti for tallets 'uniqueness' - og dermed heller ikke for at IE ikke cacher en gang imellem  ;o)

POST har desuden den fordel, at du kan sende væsentligt længere strenge (større datamængder) - ligesom det er lettere at sniffe data sendt i en URL, end data sendt som datapakker
Avatar billede dramsgaard Nybegynder
22. maj 2011 - 13:25 #5
har glemt at lukke - hvis du vil have point, så smid et svar :)
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