webForumDet fria alternativet

Skicka med id på div-tagg som ska uppdateras

JavaScript

4 svar · 598 visningar · startad av Hulth

Medlem sedan juni 2001272 inlägg
Frågan#1

Tjo!

Såhär ser min nuvarande kod ut, och den funkar, men jag vill kunna skicka med ytterliggare en parameter i sndReq för att ange vilken div-id som utdatan ska skrivas till.

Anropas med: sndReq('hej.asp?foo=bar')

function createRequestObject() {
	var ro;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer"){
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
			ro = new XMLHttpRequest();
	}
	return ro;
}

var http = createRequestObject();

function sndReq(theURL) {
	document.getElementById('ajax_response').innerHTML = "<div align='center'><img src='ajax-loader.gif'><br>Hämtar data...</div>"
	http.open('get', theURL);
	http.send(null);
	http.onreadystatechange = handleResponse;
}

function handleResponse() {
	if(http.readyState == 4 && http.status==200) {
		document.getElementById('ajax_response').innerHTML = http.responseText;
	}
}

Jag tänkte ju att det här blir enkelt att fixa, är ju bara att skicka med en variabel till, right? Nej, följande kod "fastnar" på readystate 1 :(

(Diff mot ovanstående kod med fetstil)

Anropas med: sndReq('hej.asp?foo=bar','ajax_response')

function createRequestObject() {
	var ro;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer"){
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
			ro = new XMLHttpRequest();
	}
	return ro;
}

var http = createRequestObject();

function sndReq(theURL[B],theDiv[/B]) {
	document.getElementById([B]theDiv[/B]).innerHTML = "<div align='center'><img src='ajax-loader.gif'><br>Hämtar data...</div>"
	http.open('get', theURL);
	http.send(null);
	http.onreadystatechange = handleResponse[B](theDiv)[/B];
}

function handleResponse([B]theDiv[/B]) {
	if(http.readyState == 4 && http.status==200) {
		document.getElementById([B]theDiv[/B]).innerHTML = http.responseText;
	}
}

Jag har en svag känsla om att det är något löjligt enkelt jag missat, så det här öppna målet bjuder jag på ;)

Medlem sedan juni 20019 519 inlägg
#2
	http.onreadystatechange = function() {
		handleResponse(theDiv);
	}
Medlem sedan juni 2001272 inlägg
#3

Hulth skrev:

Jag har en svag känsla om att det är något löjligt enkelt jag missat

Tack! Funkar klockrent :birp

För förståelsens skull, varför behöver man ange att det är en funktion som anropas, borde tyckas att det känns givet i och med att man skickar med variablar till den?

Medlem sedan juni 20019 519 inlägg
#4

alla event du binder skall du binda funktioner till, men när du skriver:

http.onreadystatechange = handleResponse(theDiv);

så kommer handeResponse köras direkt så fort JS läser in all JS kod, vilket du inte vill du vill att funktionen skall köras när eventet readystatechange triggas.

Medlem sedan juni 2001272 inlägg
#5

Aha :)

Då har man lärt sig något nytt denna dagen också, tack igen :)

276 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)