Denne funktion returnerer en liste af data med samme link ("vis alle"
eller "vis seneste"), som har kaldt scriptet første gang. Det spiller
fint i FF, IE8, men for IE6 & IE7 kun første gang det kaldes. Anden
gang kommer der alerts for querystring, men aldrig et svar
onreadystatechange, hvorfor?
function showArrangements(view) {
// Create a function that will receive data sent from the server
ajax.onreadystatechange = function() {
alert("ajax.readyState=" + ajax.readyState)
if(ajax.readyState == 4) {
var ajaxDisplay = document.getElementById('front_content1');
ajaxDisplay.innerHTML = ajax.responseText;
}
}
var queryString="";
// tag Jer ikke af if/else her, det er ren debug
if(view == "all_arrangements") {
queryString = "?view=" + view;
}
else {
queryString = "?view=" + view;
alert("else: " +queryString)
}
// make a unique request everytime otherwise IE will return cached
data
queryString += rnd();
alert("Q: " +queryString)
// alert("showArrangement: " +queryString)
ajax.open("GET", "ajax/show_arrangements.php" + queryString, true);
ajax.send(null);
}
HTML:
<div class="content1" id="front_content1">
<!-- start på dynamisk kode -->
<div class="race_head">
<div class="race_head_left">Kommende arrangementer</div>
<div class="race_head_right"><a href="#" onclick=showArrangements
("all_arrangements")>Se alle</a></div>
</div>
Og efter første kald er koden:
<div class="race_head">
<div class="race_head_left">Kommende arrangementer</div>
<div class="race_head_right"><a href="#" onclick=showArrangements
("close")>Luk</a></div>
</div>
Er der noget jeg har lavet forkert her, som bare alligevel virker i
IE8 og FF3.5 eller?
--
Mvh
Kim Emax
> function showArrangements(view) {
> // Create a function that will receive data sent from the server
> ajax.onreadystatechange = function() {
> alert("ajax.readyState=" + ajax.readyState)
> if(ajax.readyState == 4) {
> var ajaxDisplay = document.getElementById('front_content1');
> ajaxDisplay.innerHTML = ajax.responseText;
> }
> }
> var queryString="";
>
> // tag Jer ikke af if/else her, det er ren debug
> if(view == "all_arrangements") {
> queryString = "?view=" + view;
> }
> else {
> queryString = "?view=" + view;
> alert("else: " +queryString)
> }
>
> // make a unique request everytime otherwise IE will return cached
> data
> queryString += rnd();
>
> alert("Q: " +queryString)
> // alert("showArrangement: " +queryString)
> ajax.open("GET", "ajax/show_arrangements.php" + queryString, true);
> ajax.send(null);
>
> }
Jeg googlede videre på problemet og fandt ud af at IE bare _skal_ være
på tværs i de ældre årgange, så det er ikke ligemeget, hvornår man
kalder hvad. Dette er den korrekte rækkefølge:
open()
onreadystatechange
send()
Efter jeg rykkede onreadystatechange ned efter open() så spiller det
som det er tiltænkt. Stupido IE do! :-)
--
Mvh
Kim Emax
> Dette er den korrekte r�kkef�lge:
>
> open()
> onreadystatechange
> send()
Korrekt er det ikke, men det virker.
> Efter jeg rykkede onreadystatechange ned efter open() s� spiller det
> som det er tilt�nkt. Stupido IE do! :-)
Jeg synes jeg havde samme problem med, at visse browsere ikke overholdt
standarden.
Om det var IE specifikt eller andre husker jeg ikke rigtig, men da du
alligevel kun tjekker/bruger p� ==4 er det vel ligegyldigt(?).
--
Med venlig hilsen
Stig Johansen
open() er en konstructor. Eller var i det "oprindelige" M$
XMLHttpRequest object.
Og eftersom der endnu ikke findes en standard for AJAX -
http://www.w3.org/TR/XMLHttpRequest/ er stadig kun et draft - kan man
med lige sᅵ meget ret (mᅵske mere) mene, at det i dette tilfᅵlde, er
alle de andre, der absolut vil vᅵre anderledes end M$.
(Det er pᅵ ingen mᅵde min hensigt at forsvare M$ - men ret skal vᅵre
ret.)
For bagud kompatibilitet, har det altid vᅵret sᅵdan, at open() *skal*
kaldes fᅵrst. Faktisk resetter et kald til open() alle andre parametre
- incl. den onreadystatechange du lige har sat. Derfor virker det ikke.
Man kan diskutere det hesigtsmᅵssige - hvilket ikke ᅵndrer pᅵ noget som
helst. Det er stadig hverken nyt eller anderledes end det "plejer" at
vᅵre. Sᅵ jeg vil nok mene, at i dette tilfᅵlde, er det ikke IE der er
"stupido". ^^
(Eftersom dit script faktisk virker i IE8, kan man vel sige tvᅵrtimod.
IE8 retter sig altsᅵ efter denne kladde til en standard, i stedet for
som M$ har for vane, at holde fast ved egne tiltag.)
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
> For bagud kompatibilitet, har det altid v�ret s�dan, at open() *skal*
> kaldes f�rst.
Enig, men m�ske *b�r*.
> Faktisk resetter et kald til open() alle andre parametre
> - incl. den onreadystatechange du lige har sat.
Er du sikker p� det?
S� vidt jeg husker, s� var problemet at nogle browsere ikke genererede en
OPENED state, og derfor 'virker' det ikke.
Jeg modsiger dig ikke, men jeg synes ikke at kunne huske, at .open
_resetter_ onreadystate, blot at den ikke bliver kaldt.
Fra
http://msdn.microsoft.com/en-us/library/ms535874(VS.85).aspx#
"[[jsudds.MSFT]] On IE, XMLHttpRequest object properties are reset when
you call the open method. The onreadystatechange handler you just set
on the line above is thrown away. Just switch the order of those two
lines."
> Fra
> http://msdn.microsoft.com/en-us/library/ms535874(VS.85).aspx#
>
> "[[jsudds.MSFT]] On IE, XMLHttpRequest object properties are reset when
> you call the open method. The onreadystatechange handler you just set
> on the line above is thrown away. Just switch the order of those two
> lines."
S� huskede jeg alligevel forkert.
Det var �benbart IE(igen igen), der gjorde at man ikke kunne kode standard.
M�ske skulle man l�gge en kommentar ind i sin rutine, s� jeg husker det til
en anden gang hvis emnet dukker op ;)
Okay? Hvad er så det korrekte?
> > Efter jeg rykkede onreadystatechange ned efter open() så spiller det
> > som det er tiltænkt. Stupido IE do! :-)
> Om det var IE specifikt eller andre husker jeg ikke rigtig, men da du
> alligevel kun tjekker/bruger på ==4 er det vel ligegyldigt(?).
Jeg tjekker inde i den statement om ajax.status er 200 eller 304, men
det var bare udeladt af eksemplet, da man aldrig nåede ind i det
statement (jeg kan selv stige af på at skulle læse +200 linier kode,
når folk spørger, derfor fjerner jeg overflødige ting)
--
Mvh
Kim Emax
> open() er en konstructor. Eller var i det "oprindelige" M$
> XMLHttpRequest object.
> Og eftersom der endnu ikke findes en standard for AJAX -http://www.w3.org/TR/XMLHttpRequest/er stadig kun et draft - kan man
> med lige så meget ret (måske mere) mene, at det i dette tilfælde, er
> alle de andre, der absolut vil være anderledes end M$.
> (Det er på ingen måde min hensigt at forsvare M$ - men ret skal være
> ret.)
> For bagud kompatibilitet, har det altid været sådan, at open() *skal*
> kaldes først. Faktisk resetter et kald til open() alle andre parametre
> - incl. den onreadystatechange du lige har sat. Derfor virker det ikke.
> Man kan diskutere det hesigtsmæssige - hvilket ikke ændrer på noget som
> helst. Det er stadig hverken nyt eller anderledes end det "plejer" at
> være. Så jeg vil nok mene, at i dette tilfælde, er det ikke IE der er
> "stupido". ^^
Det er så dælme en underlig implementering at det først er anden gang
man kalder scriptet at open() lukker en onreadystatechange, der er sat
inden open(), ikke?
> (Eftersom dit script faktisk virker i IE8, kan man vel sige tværtimod.
> IE8 retter sig altså efter denne kladde til en standard, i stedet for
> som M$ har for vane, at holde fast ved egne tiltag.)
Jeg så det sådan at IE først i V8 gør tingene på samme måde som andre
browsere, men som du skriver ovenfor må det være de andre, der træder
ved siden af og nu gør IE8 det så også?
Har du et simpelt kode eks på, hvordan du selv laver AJAX?
--
Mvh
Kim Emax
Nᅵr man ikke gᅵr tingene rigtigt, er det temmelig vanskeligt at
forudsige resultatet, uanset om det er fᅵrste eller femtende gang man
gᅵr det forkert.
Det kunne - fra din beskrivelse - lyde somom implementeringerne kun
resetter andre data med open(), hvis objektet faktisk har vᅵret gennem
en cyklus. Men det skal man nok ned pᅵ kode-niveau inde i objectet for
at afgᅵre. Og under alle omstᅵndigheder, er det ikke stabilt at udnytte
det, nᅵr dokumentationen siger noget andet..
>> (Eftersom dit script faktisk virker i IE8, kan man vel sige tvᅵrtimod.
>> IE8 retter sig altsᅵ efter denne kladde til en standard, i stedet for
>> som M$ har for vane, at holde fast ved egne tiltag.)
>
> Jeg sᅵ det sᅵdan at IE fᅵrst i V8 gᅵr tingene pᅵ samme mᅵde som andre
> browsere, men som du skriver ovenfor mᅵ det vᅵre de andre, der trᅵder
> ved siden af og nu gᅵr IE8 det sᅵ ogsᅵ?
Vi er temmelig mange, der er sure pᅵ IE, og specielt de ᅵldre
versioner.
XMLHttpRequest objectet, blev "opfundet" af M$, og der findes ikke en
gᅵldende standard endnu.
I mit hoved, er det altsᅵ "de andre" der har gjort tingene anderledes
end M$.
Med IE8 forsᅵger M$ at efterleve en kommende standard, selvom den er
forskellig fra sᅵdan som M$ har gjort siden '91 eller '92 var det vist,
det fᅵrste XMLHttpRequest object sᅵ dagens lys. Hvilket jeg ser som
positivt.
> Har du et simpelt kode eks pᅵ, hvordan du selv laver AJAX?
http://bbsorensen.dk/?men=Software/AJAX/
Simpelt med forklaring.
> On 29 Okt., 16:04, Stig Johansen <wopr...@gmaill.com> wrote:
>> Korrekt er det ikke, men det virker.
>
> Okay? Hvad er s� det korrekte?
Det ved jeg squ da ikke Kim, en ting er hvad der er 'korrekt' if�lge
standarder, og noget andet er hvad der er funktionelt brugbart.
>> Om det var IE specifikt eller andre husker jeg ikke rigtig, men da du
>> alligevel kun tjekker/bruger p� ==4 er det vel ligegyldigt(?).
>
> Jeg tjekker inde i den statement om ajax.status er 200 eller 304, men
> det var bare udeladt af eksemplet, da man aldrig n�ede ind i det
> statement (jeg kan selv stige af p� at skulle l�se +200 linier kode,
> n�r folk sp�rger, derfor fjerner jeg overfl�dige ting)
Jeg bruger selv min egen rutine:
<http://w-o-p-r.dk/javascript/callxmlhttprequest.js>
og der har jeg selv sprunget andre states over udover readystate==4.
Jeg havde nogle ambitioner om at lave noget errorhandling i prologen i de
indledende states, men det eneste interessante er readystate==4.
(Bortset fra det, s� er der kun 88 linier kode iflg. min editor).
Og bortset fra det, og bortset fra det, s� kr�ver den ogs� :
<http://w-o-p-r.dk/javascript/utf8toansi.js>
Hvis man vil have ansi data ned over 'wiren'.
Men det er kun 42 linier ekstra.
> > Okay? Hvad er så det korrekte?
>
> Det ved jeg squ da ikke Kim, en ting er hvad der er 'korrekt' ifølge
> standarder, og noget andet er hvad der er funktionelt brugbart.
hehe, det lød bare som om du konstaterede at det jeg havde skrevet
ikke var korrekt fordi du vidste bedre :-)
> Jeg bruger selv min egen rutine:
> <http://w-o-p-r.dk/javascript/callxmlhttprequest.js>
> og der har jeg selv sprunget andre states over udover readystate==4.
Ok, men jeg er før blevet dunket i hovedet med at man bør teste HTTP
status og det giver go mening, for gider du vise en 403, 404 eller
500? ;-)
> Jeg havde nogle ambitioner om at lave noget errorhandling i prologen i de
> indledende states, men det eneste interessante er readystate==4.
Se ovenstående
> (Bortset fra det, så er der kun 88 linier kode iflg. min editor).
>
> Og bortset fra det, og bortset fra det, så kræver den også :
> <http://w-o-p-r.dk/javascript/utf8toansi.js>
> Hvis man vil have ansi data ned over 'wiren'.
> Men det er kun 42 linier ekstra.
Det er interessant at se, hvordan du har grebet det an, så tak for
link og input.
--
Mvh
Kim Emax
Ja, specielt 500 er interessant, da det er her der kommer fejlmeldinger ved
brug af f.eks. ASP.
Nu har jeg implementeret en fejl, s� hvis du kigger her:
http://w-o-p-r.dk/gallery/gallery.show.this.asp?GalleryName=ajax_test&Galler
yOwner=Stig%20Johansen
og klikker p� 'h�jrepilen', s� kan du se hvordan en 500 optr�der i prologen.
Jeg fjerner fejlen igen, men en 500 kan liges� godt v�re 'service
unavaiable', som det f.eks. flere gange er sket hos min udbyder.
--
Med venlig hilsen/Best regards
Stig Johansen
> "Kim Emax" <kim...@gmail.com> wrote in message
> news:dd5c240a-4bd0-4ad7...@m26g2000yqb.googlegroups.com...
>>for gider du vise en 403, 404 eller
>>500? ;-)
>
> Ja, specielt 500 er interessant, da det er her der kommer fejlmeldinger
> ved brug af f.eks. ASP.
>
> Nu har jeg implementeret en fejl, ..
Jeg har nok misforst�et dit indl�g.
Du skriver: 'gider du vise', og dermed sagde jeg ja, og lavede en demo.
M�ske mener du i virkeligheden: 'gider man vise..' ?
Under alle omst�ndigheder har jeg fjernet den omtalte demo(fejl) - s� om du
har set den eller ej, m� v�re uvist.
> Jeg har nok misforstået dit indlæg.
>
> Du skriver: 'gider du vise', og dermed sagde jeg ja, og lavede en demo.
>
> Måske mener du i virkeligheden: 'gider man vise..' ?
haha, ja, det jeg mente var om man havde lyst til at præsentere
brugeren for andet end status 200 og 302 sider :-)
--
Mvh
Kim Emax
> On 1 Nov., 11:29, Stig Johansen <wopr...@gmaill.com> wrote:
>> M�ske mener du i virkeligheden: 'gider man vise..' ?
>
> haha, ja, det jeg mente var om man havde lyst til at pr�sentere
> brugeren for andet end status 200 og 302 sider :-)
Jeg tror ikke rigtig jeg er med.
I min optik giver det mening at vise andet, jfr. mit tidligere indl�g.
For ikke s� lang tid siden var zircom/annafind udsat for et DDoS attack, og
der fik man en "503 Service Unavailable".
Jeg ved ikke hvad du vil pr�sentere i de givne tilf�lde, men jeg synes det
er en god ide at pr�sentere 'sandheden'.
Hvis du t�nker p� brugerens oplevelse, hvad viser du s� hvis der ikke er
'bid'?
if(ajax.status == 200 || ajax.status == 302) {
// viser indholdet, der er returneret.
}
else {
// overordnet print "Der er opstået et problem, prøv igen senere";
// så kan man altid gå i detaljer med de forskellige fejlsider og
forklare nærmere, hvis man vil det..
}
Det er det jeg mener. Tjekker man kun på ajax.readyState == 4, så
viser man også div. fejlsider. Det er selvfølgelig op til en selv om
man bare vil kaste det i hovedet på brugeren eller servere det i en
pæn indpakning.
--
Mvh
Kim Emax
> if(ajax.status == 200 || ajax.status == 302) {
Jeg bruger nu:
if ( lXMLHTTPRequest.status != 200 && lXMLHTTPRequest.status != 100 &&
lXMLHTTPRequest.status != 304 ) {
Da visse browsere kan finde p� at returnere en '100 Continue'.
> Det er det jeg mener. Tjekker man kun p� ajax.readyState == 4, s�
> viser man ogs� div. fejlsider. Det er selvf�lgelig op til en selv om
> man bare vil kaste det i hovedet p� brugeren eller servere det i en
> p�n indpakning.
Ja, men alene at tjekke p� readystate==4 siger jo kun noget om hvilken state
man befinder sig i, intet om resultatet.
Jep, jeg tror vi mener det samme, men taler forbi hinanden. Når du
tidligere har skrevet "Jeg havde nogle ambitioner om at lave noget
errorhandling i prologen i de
indledende states, men det eneste interessante er readystate==4." så
opfattede jeg det som at du var ligeglad med, hvad http status, der
blev returneret, du viser bare det, der kommer retur :-)
--
mvh
Kim Emax
> Jep, jeg tror vi mener det samme, men taler forbi hinanden. N�r du
> tidligere har skrevet "Jeg havde nogle ambitioner om at lave noget
> errorhandling i prologen i de
> indledende states, men det eneste interessante er readystate==4." s�
> opfattede jeg det som at du var ligeglad med, hvad http status, der
> blev returneret, du viser bare det, der kommer retur :-)
N�h - s�dan :-)
Det var ikke s�dan det hang sammen.
Det jeg mente med errorhandling, var i forbindelse med de enkelte states,
men det gav ikke rigtig mening, s� det jeg mente var, at det ikke giver
mening at lave errorhandling p� andet end DONE (state=4).