Toon posts:

[Safari] Error bij het aan maken van een xmldocument

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik onderhoud een website waarin met een stukje javascript een xml document wordt gegenereerd aan de hand van een bepaalde array. Dit xml wordt vervolgens naar de server gestuurd volgens het AJAX principe. De code werkt uitstekend in IE6, IE7 en Firefox. Als ik echter de site in Safari bekijk geeft safari in een bepaalde regel "Null value" terug. Het gaat daarbij om de onderstaande regel.


JavaScript:
1
root.appendChild(bdy);


Handelt Safari dit soort dingen anders af of doe ik zelf iets verkeerd? Ik kom er zelf niet zo snel uit helaas :? Alvast bedankt voor alle hulp!


JavaScript:
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
    if(document.implementation.createDocument){ 
      xmldoc = document.implementation.createDocument("", "envelope", null); 
    } else { 
      xmldoc = new ActiveXObject("Microsoft.XMLDOM"); 
      var root = xmldoc.createDocumentFragment(); 
      xmlElem = xmldoc.createElement("envelope"); 
      root.appendChild(xmlElem); 
      xmldoc.appendChild(root); 
    } 

    var root=xmldoc.documentElement;
    var bdy=xmldoc.createElement('body');
    
    for(var i=0;i<cmdArr.length;i++){
        var cmd = cmdArr[i];
        var rpcNode=xmldoc.createElement('rpc');
        
            for(var j=0;j<cmd.length;j++){
                var param = cmd[j];
                if(param[0]=='rpcCommand'){
                    rpcNode.setAttribute('value',param[1]);
                } else {
                    var paramNode=xmldoc.createElement(param[0]);
                    var paramValue=xmldoc.createTextNode(param[1]);
                    paramNode.appendChild(paramValue);
                    rpcNode.appendChild(paramNode);
                }
            }
        bdy.appendChild(rpcNode);
    }
    root.appendChild(bdy);
    return xmldoc;

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11 15:46

OkkE

CSS influencer :+

Als ik even zoek, kom ik op quirksmode.org waar het volgende staat:
x = document.implementation.createDocument('','',null)

* Safari supports the bare method. v73 could import XML, but not read out the XML and write the data into the HTML page. v80 has regressed on this point
* Opera also supports the bare method, but not the importing of XML.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Topicstarter
OkkE schreef op vrijdag 01 juni 2007 @ 12:34:
Als ik even zoek, kom ik op quirksmode.org waar het volgende staat:

[...]
Bedankt voor je hulp, ik begrijp echter nog niet precies wat het probleem is. Kun je wat meer uitleg geven?

Verwijderd

Topicstarter
*kickje*

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11 15:46

OkkE

CSS influencer :+

Ik heb zelf nog niet veel met XML en AJAX gewerkt, en bezit geen Safari, dus veel kan ik je niet helpen. Maar in de pagina die ik poste staat dus dat Safari versie73 niet veel met een XML kan. Dit kan betekenen dan je variabele xmldoc (regel 2) niet (de juiste) waarde bevat in Safari. Hierdoor kan de variabele root (regel 11) ook weer een andere waarde bevatten..

Ik heb dus het idee dat het in de (niet volledige) ondersteuning van Safari zit, dat je de melding krijgt. Je zou het kunnen testen door in zowel Firefox als in Safari de "root" variabele via een alert() te tonen, en kijken of het afwijkt.

Helaas voor jou, heb ik geen oplossing voor je probleem. Deze hele post (en mijn vorige) is dan ook niet meer als "ik denk dat het daar zou kunnen zitten". :) Succes.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Topicstarter
Thanks Okke!

Na wat alerten weet ik ongeveer waar het probleem zit. Het zit niet zozeer in het aanmaken van het document maar in de regel:

JavaScript:
1
var root=xmldoc.documentElement;


Alerten in Firefox en IE geeft een object terug, in Safari een null waarde. Nu uitzoeken waarom..

Edit:

JavaScript:
1
var root=xmldoc.getElementsByTagName("envelope")[0];


Het bovenstaande lost ook niets op, het lijkt er dus op dat Safari geen rootElement aanmaakt.

Hoe maak ik een rootelement aan nadat het document al gemaakt is?

Edit 2:

Na wat sukkelen heb ik deze oplossing gevonden:

JavaScript:
1
2
3
4
5
if(!xmldoc.documentElement) {  
        var newRootElement = xmldoc.createDocumentFragment();   
        newRootElement.appendChild(xmldoc.createElement("envelope"));
        xmldoc.appendChild(newRootElement);
    }


Het werkt in ieder geval nu wel! Bedankt voor je hulp in ieder geval okke.

Als iemand nog aanmerkingen heeft hoor ik het graag :)

[ Voor 59% gewijzigd door Verwijderd op 04-06-2007 19:50 ]

Pagina: 1