[ajax] Problem med flera open efter varandra

Permalänk
Medlem

[ajax] Problem med flera open efter varandra

Hejsan!

Jag har lite problem med min kod som ser ut såhär

function loaddata(div_id){ var element = document.getElementById(div_id); element.innerHTML = "Loading..."; xmlhttp.abort(); xmlhttp.open("GET", 'foo.php?id='+div_id); xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { element.innerHTML = xmlhttp.responseText; } } xmlhttp.send(null); }

Kör jag denna en gång så funkar det utmärkt.

Men jag kör denna funktion ett antal gånger i rad vid vissa tillfällen, då jag ska hämta data till flera divar (funktionen laddar in data i divvar efter id:t man skickar med som ni kanske förstår) . Då uppstår problem!

Jag antar att det beror på att själva onreadystatechange rutiner och likande skrivs över innan svaret från foo.php hunnit komma. från det tidigare funktionsanropet

Kan detta lösas på något sätt? Har försökt söka, men jag vet inte riktigt vad jag ska söka på

MvH
Niclas

Visa signatur

Core 2 Quad Q6600 | Gigabyte GA-P35-DS3 | Corsair XMS2-6400 2x2048MB | Corsair HX 520W | BFG 8800GT

Permalänk
Medlem

Nytt object...

Du måste skapa en nytt xmlhttp object för varje gång du anropar functionen om du ska köra flera samtidigt.....

function loaddata(div_id){ var element = document.getElementById(div_id); element.innerHTML = "Loading..."; var xmlhttp = getXmlHttpObj(); xmlhttp.abort(); xmlhttp.open("GET", 'foo.php?id='+div_id); xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { element.innerHTML = xmlhttp.responseText; } } xmlhttp.send(null); } function getXmlHttpObj() { var xmlhttp; /*@cc_on @if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } @else xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; } } return xmlhttp; }

Det borde fungera.....

Permalänk

Alternativt lägg in async=false så den hämtar "klart" innan den dyker på nästa och slopa readystate kontrollen...

/Anders

Visa signatur

**************************
Om det fungerar för bra, installera om det...

Permalänk
Medlem

Funkade perfekt zezam. Man tackar och bockar!

Visa signatur

Core 2 Quad Q6600 | Gigabyte GA-P35-DS3 | Corsair XMS2-6400 2x2048MB | Corsair HX 520W | BFG 8800GT

Permalänk
Medlem