Ik heb al wat kleine dingetje gedaan met AJAX, maar nu stuit ik op het volgende probleem:

Bij de vorige scripts die ik gemaakt had, was de actie van de server het verwijderen of het wijzigen van iets in een database, maar nu is het wat ingewikkelder.

Als ik alleen iets wil doen in de database is de responsetext een heel simpel zinnetje van bijvoorbeeld: 'het object is succesvol verwijderd uit de database'.
Nu in mijn geval wil ik een stuk van een pagina opnieuw opbouwen dmv bijvoorbeeld innerHTML.

Voor de duidelijkheid post ik even mijn AJAX-functie:

var xmlHttp;
function createXMLHttpRequest() {
	if (window.ActiveXObject) {
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if (window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	}
}
function startAjaxRequest(url,data) {
	createXMLHttpRequest();
	xmlHttp.onreadystatechange = handleStateChange;
	xmlHttp.open("POST", url, true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");		
	xmlHttp.send(data);
}
function handleStateChange() {
	if(xmlHttp.readyState == 4) {
		if(xmlHttp.status == 200) {
			alert(xmlHttp.responseText)			
		}
		else{
			alert('Er is een fout opgetreden: (' + xmlHttp.status + ') ' + xmlHttp.responseText)	
		}
	}
}


met de volgende functie wil ik de pagina overnieuw opbouwen:


function next_blog(blogid){
	startAjaxRequest('php-ajax-actions.php?action=next_blog','blog_id=' + blogid)
alert (xmlHttp.responseText)
	//hier alle commando's om de pagina overnieuw op te bouwen
}


Maar nu heb ik opeens niet meer de beschikking over de variabele xmlHttp.responseText. Moet ik nu in elke functie waar ik de pagina mee wil veranderen de hele xmlrequest functie in uittypen of is er een andere manier?
Alvast bedankt!
Heb geen reacties gehad op dit topic, maar ben er wel achter gekomen via een ander forum. De oorzaak van mijn probleem is dat javascript asynchroom is, dus de httprequest duurt bijvoorbeeld een tijdje, javascript wacht hier niet op,maar gaat gewoon door met de volgende commando's. Weet er iemand een oplossing om een functie uit te voeren pas als de readystate 4 is, zonder dat ik de hele request-functie hoef te herhalen?
Ik weet zo snel geen elegante oplossing, maar een paardenmiddel zou zijn dat je setTimeout gebruikt om het script even uit te stellen.
Ja, daar heb ik ook al aan gedacht, maar ik ga het absoluut niet gebruiken, stel dat de server er nu iets langer over doet om te antwoorden, dan krijg je helemaal niets te zien dus. Betekent het dus, dat je bij elke AJAX-actie alle functie (zoals in het topic-bericht) moet herhalen?
Het lijkt me sterk; er zijn natuurlijk al talloze mensen tegen dat asynchrone probleem opgelopen. quirksmode.org van PPK doorspitten maar. Ik ben helaas geen AJAX kenner ;-)

Is er niet toevallig een attribuut van het XMLHttpRequest object dat je op false kunt zetten?

Ik herinner me dat je met het xmlDocument object zoiets kon doen:

	xmlDocument = new ActiveXObject("microsoft.xmldom");
	xmlDocument.async = "false";

function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            jouw_functie(xmlHttp.responseText)            
        }
        else{
            alert('Er is een fout opgetreden: (' + xmlHttp.status + ') ' + xmlHttp.responseText)    
        }
    }
}

dit??
zo wordt de functie uitgevoerd als xmlHttp.responseText beschikbaar is.

meestal wordt de aanroep van de functie dan zo gedaan

startAjaxRequest('php-ajax-actions.php?action=next_blog','blog_id=' + blogid, jouw_functie)

deze moet je dan nog even een extra parameter meegeven startAjaxRequest(url,data,callback_function)
aync uit?
xmlHttp.open("POST", url, true);
wordt
xmlHttp.open("POST", url, false);

Of dat je probleem zal oplossen weet ik niet.
@joop: Deze oplossing had ik ook al geprobeerd, het lijkt een goede oplossing, maar zit nu met het probleem dat in de functie handleStateChange je niet meer de beschikking hebt over het argument dat je meegeeft aan de functie startAjaxRequest

@Jelmer: Dit werkt in principe wel (bedankt! ;-) ), maar nu voert hij het script ook uit als de status niet 200 is, dus als er bijvoorbeeld een 404-error is, gebeurd er niets.
Een super artikel joop, bedankt!! Ik snap nu een stuk meer, maar kom er nog steeds niet helemaal uit, wat bedoel je precies met een class?
Class is een term uit de wereld van object-georiƫnteerd programmeren (OOP). Een class kun je zien als een op zichzelf staande verzameling variabelen en functies. Heel veel dingen in JavaScript zijn van zichzelf al een class, zoals bijvoorbeeld het String-object.

Zie w3schools.com voor meer info.

Reageren