Ik ben bezig met een stukje Ajax. Op het laatste stukje code na.
In de functie getxmlresultaat maak ik verbinding en haal ik alle gegevens op; tot zover werkt alles op.
Vervolgens laat ik het script in een while lus wachten totdat xmlhttp klaar is (klaar = readyState 4).

Met deze code doet hij het niet
function getxmlresultaat(xmlhttp, url)
{
    xmlhttp.open("GET", url,true);
    xmlhttp.send(null);
    
    while (xmlhttp.readyState!=4)
    {
    }
    
    resultaat = xmlhttp.responseText;
    return resultaat;
}

Vervang ik de while door deze:
    while (xmlhttp.readyState!=4)
    {
alert('wachten');
    }

Dan doet hij het wel maar ik wil eigenlijk geen alert tonen.
Iemand een oplossing ?
alert weghalen?
vervangen door een leeg iets, bv document.write?
Werkt helaas niet, ben nu het geheel aan het herschrijven met een aparte functie voor het wachten.
Gelukt, volledige code is geworden:
var xmlhttp = false;
var resultaat = false;
var klaar = false;
var functienaamback = false;

function getxmlresultaat(url)
{
    // Leeg XML object aanmaken
    
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
    // JScript gives us Conditional compilation, we can cope with old IE versions.
    // and security blocked creation of the objects.
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            xmlhttp = false;
        }
    }
    @end @*/
    if (!xmlhttp && typeof XMLHttpRequest!='undefined')
    {
        xmlhttp = new XMLHttpRequest();
    }
    xmlhttp.open("GET", url,true);
    xmlhttp.send(null);
    xmlhttp.onreadystatechange = xmlwachten;
}

function xmlwachten()
{
    if (xmlhttp.readyState!=4)
    {
        klaar = false;
    }
    if (xmlhttp.readyState==4)
    {
        resultaat = xmlhttp.responseText;
        klaar = true;
    }
}

function wachten(functienaam)
{
    if ((functienaam == 0) || (functienaam == false) || (functienaam == undefined))
    {
        functienaam = functienaamback;
    }
    else
    {
        functienaamback = functienaam;
    }
    if (klaar == false)
    {
        window.setTimeout(wachten, 1000);
    }
    else
    {
        eval(functienaam + ' ("'+escape(resultaat)+'")');
    }
}

function boxweergeven(bron)
{
    alert(unescape(bron))
}

En dan aanroepen met
<a onClick="getxmlresultaat('../dirindex.txt'); wachten('boxweergeven'); ">Start Ajax</a>
Maar dan mag je de naam 'ajax' ook niet meer gebruiken. Namelijk, asynchroon is niet meer van toepassing (die while-lus houdt alles op, dus je kan niets meer doen in de tussentijd, hele voordeel van XMLHTTPRequest weg...) en XML is ook niet van toepassing (maar dat is wel vaker zo)

Wauw, je houdt alleen de J nog over!

... zei Jelmer cynisch.

Maar even serieus, als je toch iets asynchroon wilt doen, waarom dan niet gewoon die laatste parameter van objXMLHTTPRequest.open op false zetten? Die zorgt er juist voor dat het asynchroon gaat, dus dat je verder kunt gaan met je script terwijl de pagina opgehaald wordt.

Reageren