[XML/JS] Object vereist, terwijl ie er wel is

Pagina: 1
Acties:

  • storeman
  • Registratie: April 2004
  • Laatst online: 08-04 23:06
Ik ben sinds kort mij aan het inlezen op AJaX, ik wil natuurlijk graag meedoen aan de hype. Erg interessant. Na verschillende tutorials en wat dingen gelezen te hebben op GoT ben ik maar eens aan de slag gegaan. Ik wil als eerste wat simpele dingen inladen en in div-jes gooien mbv javascript en XML.
Op zich lukt dit best. Alleen zo gauw ik de functie aanroep vanaf een knop, loopt het geheel vast. Als ik de functie aan een init functie knoop werkt hij dus wel. Ook op te merken, in FF werkt het WEL, maar IE doet dat dus nIEt. (geen discussie over IE aub).

Als eerste heb ik geprobeert de functie vanachter een knop aan te roepen mbv:
code:
1
<a href="javascript: getContent('xmlDocs/adminPage.xml')">Admin</a>

Met de variabele de locatie van het bestand. Deze is correct, wat met een regeltje alert(HttpObj.responseText) geeft ie keurig de inhoud weer.

Ik gebruik de volgende functies in js:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var HttpObj;
function init(){
    HttpObj = getHttpObj();
    dMenu       =   document.getElementById('menu');
    dContent    =   document.getElementById('content');
    dStatus     =   document.getElementById('status');
    getContent('XMLdocs/adminPage.xml');
}

function getHttpObj(){
    var x=(window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest());
    return x;
}

function getContent(filename) { 
    HttpObj.open('GET', filename); 
    HttpObj.onreadystatechange = buildContent;
    HttpObj.send(null); 
}
function buildContent(){
    if(HttpObj.readyState==1){
        showDivObj(dStatus, 'Bezig met zoeken van verbinding...');
    }
    if(HttpObj.readyState==2){
        showDivObj(dStatus, 'Verbinding gemaakt, data wordt maakt...');
    }
    if(HttpObj.readyState==3){
        showDivObj(dStatus, 'Verbinding gemaakt. Data gemaakt. Bezig met laden...');
    }
    if(HttpObj.readyState==4){
        var response    = HttpObj.responseXML;
        var root        = response.documentElement;
        alert(HttpObj.responseText);
        [u]var tContent     = '<div id="contentTitle">' + getNodeValue(root, 'title') + "</div>\n"; [/u]
        tContent        = tContent + getNodeValue(root, 'content') + "\n";
        dContent.innerHTML = tContent;
        hideDivObj(dStatus);
    }
    return null;
}

function getNodeValue(obj,tag){
    return obj.getElementsByTagName(tag)[0].firstChild.nodeValue; 
}


Hierbij heb ik ook een functieaanroep in de init functie. Dit werkt WEL en laat dus alles netjes zien in de contentdiv, die als globale variabele bestaat.

Erg vreemd omdat het via de INIT wel werkt. Ik krijg de error in IE, object vereist. Dit gebeurt in de onderstreepte regel bij het aanroepen van de getNode functie. Ook als ik de hele regel versimpel (dus niet met tussenvars) geeft hij dezelfde fout, wat niet onlogisch is natuurlijk.

var tContent = '<div id="contentTitle">' + getNodeValue(root, 'title') + "</div>\n";

"Chaos kan niet uit de hand lopen"


  • storeman
  • Registratie: April 2004
  • Laatst online: 08-04 23:06
Het spijt mij zeer mensen dat ik deze post geplaatst heb. Het lijkt er namelijk op dat de pagina gewoon gecached was en het daardoor niet werkte in IE. Doordat ik tegen een ander cacheprobleem aanliep. (ik had wat wijzigingen doorgevoerd in het XML) en deze in IE niet meteen zichtbaar waren. Dus ik in een php bestand met wat headers meesturen.

Het werkt nu dus naar behoren. Erg zonde van mijn tijd, ben er toch een aantal uren mee bezig geweest. (gelukkig wel weer wat geleerd!).

"Chaos kan niet uit de hand lopen"


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
IE cacht resultaten van een XMLHttpRequest ook als er no-cache headers worden meegestuurd. Het is gelukkig makkelijk te omzeilen door een random string aan de url toe te voegen.

| Toen / Nu


  • storeman
  • Registratie: April 2004
  • Laatst online: 08-04 23:06
thnx voor de tip, dit ga ik zeker toepassen!

"Chaos kan niet uit de hand lopen"