Qualcuno di voi saprebbe indicarmi qual'è il metodo corretto per
caricare da file, quindi con qualcosa del tipo
XMLDocument.load(nomefile), ammettendo di riuscire (e qui chiedo il
vostro aiuto) di istanziare questo XMLDocument in maniera completamente
indipendente dall'architettura su cui gira il mio javascript.
Vi posto la funzione che utilizzo al momento (e che non da' il risultato
sperato):
function loadXMLDoc(dname)
{
if (document.implementation && document.implementation.createDocument)
{
xmlDoc = document.implementation.createDocument("", "", null);
alert(xmlDoc);
}
else if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
alert(xmlDoc);
}
else
{
alert('Your browser can\'t handle this script');
return;
}
xmlDoc.load(dname);
return xmlDoc;
}
Internet explorer 7 mi restituisce: "il server di automazione non può
creare l'oggetto".
Firefox 3 sembra crearlo, ma quando poi creo un nodo da "appendere"
a questo DOM, non mi vede il nodo come un NodeElement..
vi ringrazio per qualsiasi suggerimento.
> Qualcuno di voi saprebbe indicarmi qual'è il metodo corretto per
> caricare da file,
Se è un file remoto, ora come ora ti conviene usare XMLHttpRequest. Il
codice che hai preso da w3schools può risultarti utile nel caso in cui
devi crearti un XMLDocument "vuoto"; oppure se devi caricare da locale
un file.
Se nessuno di questi due è il tuo caso specifico, non starci neppure a
perder tempo dietro.
--
~ "Nei film americani, qualsiasi problema che venga considerato
sufficientemente catastrofico, puo' essere risolto facendo esplodere
uno o piu' ordigni nucleari" (ZER0 & Cosimo)
Ti spiego la mia situazione:
ho un javascript client-side che deve recuperare localmente
questo XMLDocument contenente già una struttura che dovrò
andare poi ad arricchire tramite javascript.
XMLHttpRequest non fa molto al caso mio in questa situazione,
mi sembra impossibile che non si riesca a trovare il modo
di superare questa incompatibilità..
E' possibile secondo te risolverla utilizzando un qualche
framework Ajax?
grazie mille,
Blob.
>> Se è un file remoto, ora come ora ti conviene usare XMLHttpRequest. Il
>> codice che hai preso da w3schools può risultarti utile nel caso in cui
>> devi crearti un XMLDocument "vuoto"; oppure se devi caricare da locale
>> un file.
>> Se nessuno di questi due è il tuo caso specifico, non starci neppure a
>> perder tempo dietro.
> Ti spiego la mia situazione:
> ho un javascript client-side che deve recuperare localmente
> questo XMLDocument contenente già una struttura
"Localmente" significa nella macchina client, ovvero quella
dell'utente. E il codice dove si trova? Perché se lo esegui
da un webserver, anche locale, è altamente probabile che tu
vada incontro a problemi di sicurezza e privilegi (ricorda,
nelle nuove versioni dei browser manco puoi più caricare un
qualche tipo di immagine locale per fare l'anteprima).
Per intenderci, sarebbe come se "www.google.it" cercasse di
caricare un file del tipo "c:\windows\dati.xml". E' davvero
questo che stai cercando di fare?
> XMLHttpRequest non fa molto al caso mio in questa situazione,
> mi sembra impossibile che non si riesca a trovare il modo
> di superare questa incompatibilità..
Le incompatibilità non le si superano, ci sono e se ne deve
prendere atto. :) Detto questo, il tuo non è un problema di
compabilità ma di codice errato. Il punto come ti ho detto,
è che spesso e volentieri non c'è bisogno di codice di quel
tipo, e spesso la gente lo usa confondendosi.
Comunque, tralasciando la questione di privilegi, se IE7 ti
restituisce il seguente errore:
"il server di automazione non può creare l'oggetto".
Devi cambiare ActiveX. Ad esempio, puoi provare a creare un
oggetto di tipo "Msxml2.DOM.Document.x.0", dove la x indica
la versione. Ad esempio:
var doc = new ActiveXObject("Msxml2.DOM.Document.6.0");
Per quanto riguarda FF invece, il nodo non è un NodeElement
semplicemente perché questo tipo mi pare che FF non lo usi,
e ti restituisca un Element.
Va visto quindi come lo crei e come lo appendi al documento
e se il documento te l'ha caricato effettivamente o meno.
Se ci sono problemi di privilegi, ti ritrovi l'errore nella
error console di FF.
--
~ "L'arte non riproduce cio' che e' visibile,ma rende visibile cio'
che non sempre lo e'" (Paul Klee)
Ti ringrazio per tutti i consigli, ma su internet explorer
i problemi mi sembrano davvero insormontabili...
Per quanto riguarda FF, ho effettivamente
un problema di privilegi, come segnalato
da firebug.
Questo è quello che faccio:
homeDom = loadXMLDoc("../speciali/home1.xml");
var opzioni = homeDom.getElementsByTagName("opzioni")[0];
var ul = homeDom.createElement("ul");
opzioni.appendChild(ul);
Firebug riporta:
"Permesso negato al metodo di chiamata Element.appendChild"
Da cosa può esser dato?
Ho provato a dare al file xml su cui opero
permessi 775 e anche 777, ma non c'è verso..
consigli?
grazie mille,
Blob
> Ti ringrazio per tutti i consigli, ma su internet explorer
> i problemi mi sembrano davvero insormontabili...
Ovvero?
> Per quanto riguarda FF, ho effettivamente
> un problema di privilegi, come segnalato
> da firebug.
> Questo č quello che faccio:
>
> homeDom = loadXMLDoc("../speciali/home1.xml");
Ok, ma questo codice lo carichi da web server, o da file locale?
Intendo dire, utilizzi il protocollo "file:///" o "http://", quando
carichi la pagina sul browser?
> var opzioni = homeDom.getElementsByTagName("opzioni")[0];
> var ul = homeDom.createElement("ul");
> opzioni.appendChild(ul);
Devi essere certo che il caricamento avvenga in modo sincrono, o in
alternativa impostare l'event-handler relativo al caricamento, cosě
da essere certi che si manipoli il documento una volta caricato.
--
~ "The demo effect, you don't expect"