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.
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.
<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); } } }
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
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"
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");
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...
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 =)
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?
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
<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); } } }
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"
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 :)
Synes godt om
Ny brugerNybegynder
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.