Avatar billede zuran Nybegynder
12. september 2009 - 20:56 Der er 22 kommentarer

XMLHttpRequest GET Internet Explorer 8

Hej.

Jeg har prøvet at lege med noget XMLHttpRequest, udfra et eksempel af W3C (http://www.w3schools.com/XML/xml_http.asp). Det foregår således, at man simpelt henter indhold fra en fil, én gang.

Jeg prøvede så at bygge videre, og sætte et interval på scriptet. Dvs. at scriptet hele tiden henter indholdet fra en fil.

Det var så der problemet opstod, for selvom jeg ændre i indholdet af filen, så bliver IE ved med at komme med det gamle indhold, altså indholdet før det blev ændret. Det virker dog helt som det skal, i browsere som FF og Google Chrome. Går jeg ind og ændre indholdet der, så opdaterer de bare som de skal, og det nye indhold kommer frem.

Jeg har søgt rundt på nettet, og prøvet forskellige ting, men dog uden held.

Nogle ideér?
Avatar billede olebole Juniormester
13. september 2009 - 13:56 #1
<ole>

w3shcools er generelt fyldt med fejl, mangler og udeladelser - og hans såkaldte Ajax tutorial er rigtig dårlig! Prøv at lægge et link til dit forsøg

/mvh
</bole>
Avatar billede zuran Nybegynder
13. september 2009 - 21:22 #2
Hej.

Jeg har ikke lige umiddelbart noget direkte eksempel. Det eneste jeg har ændret på, ved eksemplet fra W3C, er at man ikke trykker på knap. Derimod er der sat et interval på, som så kører funktionen en gang imellem.

Hvis man så går ind og ændre i den fil, der hentes indhold fra, mens man har den side, der opdaterer, åben, så blive IE ved med at komme med det første den hentede.
Avatar billede zuran Nybegynder
13. september 2009 - 21:32 #3
<div id="text"></div>

<script type="text/javascript">
var xmlhttp;
function loadFile()
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Your browser does not support XMLHTTP!");
  return;
  }
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET", "adresse til fil", true);
xmlhttp.send(null);
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
  }
if (window.ActiveXObject)
  {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
  }
return null;
}

function stateChanged()
{
if (xmlhttp.readyState==4)
  {
  if (xmlhttp.status==200)
    {
    document.getElementById("text").innerHTML = xmlhttp.responseText;
    }
  else
    {
    alert("Problem retrieving XML data:" + xmlhttp.statusText);
    }
  }
}

setInterval("loadFile()", 1000);
</script>
Avatar billede olebole Juniormester
13. september 2009 - 21:45 #4
Brug post i stedet for get. Så skal du også sætte en request header med den rette Content-Type - og bruge query strengen som argument i kaldet til send
Avatar billede zuran Nybegynder
14. september 2009 - 19:58 #5
Hvorfor skal jeg bruge POST istedet for GET? Hvad er fordelen ved dette? :)

Og hvad mener du med query strengen?
Avatar billede zuran Nybegynder
14. september 2009 - 20:05 #6
Jeg har nu prøvet at tage adressen til den fil, der skal hentes indhold fra, og indsat den som det der sendes med. Så har jeg også ændret GET til POST.

Det giver fejlen "Problem retrieving XML data... osv"
Avatar billede olebole Juniormester
15. september 2009 - 13:43 #7
Det hjælper ikke meget at skrive en halv fejl. det kan man ikke læse meget ud af  =)

Der er en del forskelle på at sende POST og GET, men i denne forbindelse er den væsentlige forskel, at responsen ikke caches ved POST.

Query styrengen er det, der står efter ? i en URL. Det skal ikke stå i URL'en men sendes med som argument i send (i stedet for null). Desuden skal du som sagt sætte en request header, når du har åbnet forbindelsen:


xmlhttp.open("POST", "adresse til fil", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

Avatar billede zuran Nybegynder
16. september 2009 - 20:23 #8
Der er intet ? i min url. Jeg har en requestHeader på. Og når jeg så bruger POST, så får jeg fejlen: Method Not Allowed
Avatar billede olebole Juniormester
16. september 2009 - 21:03 #9
- og?
Avatar billede zuran Nybegynder
16. september 2009 - 21:37 #10
Ja, jeg vil jo gerne have det til at virke med Internet Explorer, som jeg har skrevet i spørgsmålet. Så foreslår du mig at bruge POST osv, og jeg gør som du siger. Så får jeg fejln "Method Not Allowed" - Det virker ikke...
Avatar billede olebole Juniormester
16. september 2009 - 21:43 #11
Jeg tør vædde med, du i fejlmeddelelsen får et linjetal, som kan vise, hvor det går galt. Du kalder adskillige metoder, så vi skal være clairvoyante for at gætte, hvad du gør galt  =)
Avatar billede zuran Nybegynder
19. september 2009 - 17:02 #12
Nej, jeg får intet linjetal.

if (xmlhttp.readyState==4)
  {
  if (xmlhttp.status==200)
    {
    document.getElementById("text").innerHTML = xmlhttp.responseText;
    }
  else
    {
    alert("Problem retrieving XML data:" + xmlhttp.statusText);
    }

Altså fejler readyState og status, hvorved der popper en fejlmeddelse frem. En sådan fejl kan IE, Firefox osv ikke spotte.

Jeg synes også selv, at det lyder mere realistisk at bruge GET i denne situation. Hvis jeg bruger GET så virker det fint, udover at IE ikke kommer med det nye indhold, men derimod det første.

Men som nævnt, er jeg blot interesseret i at få det til virke i IE også. Så er jeg ligeglad hvordan man henter indholdet.

Der må da være en grund til, at IE ikke henter det nye indhold?
Avatar billede olebole Juniormester
19. september 2009 - 17:13 #13
Du skal ikke tænke så meget på, hvad der virker realistisk, når du ikke ved, hvordan XMLHttpRequests virker. Det realistiske er at bruge post, da IE cacher resultatet ved get ... og det var vist netop dét problem, du gerne ville have løst  ;o)

At du får den fejl skyldes, at serveren ikke returnerer 200 som status. Hvorfor den ikke gør det, kan jeg ikke vide - men du kunne jo starte med at vise den præcise kode, du bruger
Avatar billede zuran Nybegynder
19. september 2009 - 17:59 #14
OK. Jeg bruger præcis koden, som jeg har postet tidligere. Nu er metoden blot ændret til POST.
Avatar billede zuran Nybegynder
19. september 2009 - 18:00 #15
Og så har jeg denne med:

xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
Avatar billede olebole Juniormester
19. september 2009 - 18:37 #16
Præcis! Du bruger ikke den kode, du lagde ud med at vise  ;o)
Hvordan ser din kode ud nu?
Avatar billede zuran Nybegynder
19. september 2009 - 21:45 #17
<div id="text"></div>

<script type="text/javascript">
var xmlhttp;
function loadFile()
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Your browser does not support XMLHTTP!");
  return;
  }
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("POST", "adresse til fil", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.send(null);
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
  }
if (window.ActiveXObject)
  {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
  }
return null;
}

function stateChanged()
{
if (xmlhttp.readyState==4)
  {
  if (xmlhttp.status==200)
    {
    document.getElementById("text").innerHTML = xmlhttp.responseText;
    }
  else
    {
    alert("Problem retrieving XML data:" + xmlhttp.statusText);
    }
  }
}

setInterval("loadFile()", 1000);
</script>
Avatar billede olebole Juniormester
19. september 2009 - 22:56 #18
Det virker hos mig
Avatar billede zuran Nybegynder
20. september 2009 - 16:21 #19
Hm, jeg får den 405 fejl: "Method Not Allowed"
Avatar billede zuran Nybegynder
20. september 2009 - 18:36 #20
Jeg synes godt nok det virker mærkeligt. Når jeg kører med GET i Internet Explorer, er det som om, at funktonen loadFile() overhovedet ikke bliver kørt, hvert sekund. Den bliver først kørt, i det jeg åbner en ny fane. Jeg har dog prøvet at sætte en alert ind, for at se, om koden overhovedet bliver afviklet. Den vil dog gerne komme frem med denne alert.

Så prøvede jeg også, at slette det hele, oprette et nyt dokument, og herefter indsætte alt koden, med POST. Så kommer der ingen fejl, men den kommer heller ikke frem med det nye indhold. Men lige i det jeg åbner en ny fane, så kommer den som med GET, frem med indholdet, men nu også en "Problem retrieving XML data: Method Not Allowed"
Avatar billede olebole Juniormester
20. september 2009 - 19:30 #21
Du er vist nødt til at lægge et link, hvis du skal have hjælp
Avatar billede zuran Nybegynder
08. november 2009 - 23:24 #22
Jeg har prøvet forskellige gratis host, men der har hele tiden været det ene, eller det andet problem. Derfor blev det her mere eller mindre lagt på hylden.

Men her til aftes fandt jeg så en løsning, udfra et indlæg, som en bruger havde skrevet, på et andet forum.

Som jeg nævner øverst i mit spørgsmål, så kommer IE hele tiden med det første indhold, altså gemmer den nærmest det første.

Det jeg så har gjort er, at at oprette en php fil, som henter indholdet fra tekstfilen. Så sætter jeg AJAX til at hente indhold fra PHP filen i stedet. Via en variabel i javascript, som hele tiden bliver opdateret, sørger jeg så for, at url'en der skal hentes fra, hele tiden er forskellig.

F.eks. fil.php?id=1. Så skal id'et blot ændres konstant, når man afvikler AJAX/Javascript. Så jeg bruger stadig GET.

For den tid du har brugt, må du gerne få point, så smid du blot 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
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