Denna kod fungerar perfekt i alla webb-läsare utom Firefox, där jag inte får tillbaka något, d.v.s. variabeln svar blir null. Det där körs asynkront, alertContents() körs långt efter att makeRequest() har returnerat, och alert() har körts. Förslagsvis flyttar du din alert in till alertContents() istället Tror inte att jag förstod det där. alerten som ligger efter makeRequest har jag lagt dit bara för att avläsa svaret. Grejjen är att requesten går till såhär, om man ritar upp den på en timeline: Jag förstår fortfarande inte varför det fungerar klockrent i alla andra webb-läsare. http://groups.google.com/group/microsoft.public.scripting.jscript/browse_thread/thread/95697b6344b8163a/9c9b17d4f4870bdb?pli=1AJAX-problem i Firefox 3
Om jag kollar innehållet i http_request.responseText så är det det rätta, men när jag lägger det i svar så blir det null. Och det händer bara i Firefox.
Nån som har ett bra svar?
var http_request = false;
var svar=null;
function makeRequest(url) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Avbrott :( Kan inte skapa en XMLHTTP instans');
return false;
}
http_request.onreadystatechange = alertContents;
http_request.open('GET', url, false);
http_request.setRequestHeader("Content-type", "application/xml");
http_request.send(null);
}
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
svar = http_request.responseText;
return svar;
}
else {
alert('Frågan kunde inte exekveras.');
alert(http_request.statusText);
}
}
}
makeRequest("checklogin.asp?anv=" + document.getElementById("anv").value + "&pw=" + document.getElementById("pw").value + "&dum=" + Math.random());
alert(svar);
Sv: AJAX-problem i Firefox 3
Sv:AJAX-problem i Firefox 3
makeRequest() ligger i en egen funktion
function checklogin() {
makeRequest(.....);
...gör nåt utifrån vad variabeln svar returnerar
}
Funkar överallt utom i Firefox.......
Sv: AJAX-problem i Firefox 3
Tråd #1:
makeRequest();
|
Påbörja ajaxanrop -> Skapar tråd #2
|
alert(svar);
Tråd #2:
Vänta på att ajaxanropet är avslutat
|
alertContents();
Tråd #1 och Tråd #2 körs alltså parallellt, och eftersom att makeRequest bara kommer påbörja anropet så returnerar den ganska så på en gång. Tråd #2 däremot tar ett tag på sig innan den har kontakta servern etc. Först efter det körs alertContents(). (Nu kan man iofs inte vara säker på att de körs parallellt osv, men det är detaljer.)
Poängen är att du visar din alert på fel ställe, istället för att visa den efter att anropet har påbörjats så ska du visa den efter att anropet har avslutats. Om du flyttar din alert(svar) in i alertContents() så kommer det med andra ord att fungera :)Sv:AJAX-problem i Firefox 3
Att lägga in en alertruta i alertContents som visar vad variabeln svar innehåller är ju inte huvudsyftet.
Min timeline ser ut så här:
1. makeRequest(url)
2. Få ett svar tillbaka från den anropade url:en
3. Gör något med utgångspunkt från vad variabeln svar innehåller.
Dessutom är - http_request.open('GET', url, false); - vilket bör betyda, att vi väntar tills svaret har returnerats eller?Sv: AJAX-problem i Firefox 3
Firefox verkar bugga när den kör synkront, anropar inte alltid onreadystatechanged. Hur som haver, mitt förslag är att du kör på ett färdigt bibliotek istället för att hacka eget, buggar som t.ex. den här är redan hanterade då nämligen.