Newsgroup: it.comp.lang.javascript
Titolo: Problema con json in IExplorer

Ho un problema con alcune pagine web in cui tramite php (cakephp) passo
dei valori a script javascript.
La sintassi di cakephp e' la seguente:
$tmp= "var miavariabile=".$javascript->object($data);
echo $javascript->codeBlock($tmp, array('safe' => true));
La funzione $javascript->object di cakephp "Generates a JavaScript
object in JavaScript Object Notation (JSON) from $data array."
La successiva istruzione aggiunge al file html lo script javascript che
include il codice generato dalla prima istruzione.
Viene creato qualcosa di simile a cio' che segue:
<script type="text/javascript">
//<![CDATA[
var phpmiavariabile=[{"Parameter":{"key_color":"0","name":"pippo"},	
{"Parameter":{"key_color":"0","name":"pluto"}]
//]]>
</script>
In firefox lo script viene eseguito senza problemi.
In Internet explorer no. Viene segnalato un errore in corrispondenza di
CDATA o nel  bel mezzo dei dati json (senza alcun senso apparente, ad
esempio in corrispondenza di un numero all'interno di una lista di numeri).
Firebug lite mi segnala un errore di tipo "previsto oggetto".
Domanda: ma il contenuto di CDATA non dovrebbe venir accettato comunque
dal browser? O ancora la versione di javascript inclusa in IE non
accetta quel tipo di sintassi?
grazie
	maxx

 dal browser? 
No, i browser attualmente (non ho provato con le ultimissime versioni di 
firefox o Opera) non lo accettano ... è per questo che metti // 
all'inizio: così lo considera come commento e lo ignora... Non sta lì il 
problema, così a naso.

 problema, così a naso.
Con "accettano" intendevo dire che non si bloccano qualunque sia il
contenuto. Solo che se non sta li' il problema...
E se l'errore fosse in javascript (di explorer)? Siccome la parte json
e' piu' complicata di quel che ho scritto, in alcuni casi contiene
qualcosa di simile ad un file kml o xml, potrebbe esserci qualche
problema nella fase di lettura? Magari qualche "nodo" del file che non
piace ad explorer...
In Jslint ho provato a copiare lo script e me lo convalida. Anche
perche' e' l'assegnazione ad una variabile di un array, complicato ma
pur sempre un array.
grazie
	maxx

 E se l'errore fosse in javascript (di explorer)? 
Può essere ... non conosco l'oggetto e ho risposto a quello che hai 
scritto, ma se avevi copiaincollato male non saprei cos'altro dirti, se 
non di fare del buon sano debug (alert dappertutto, così capisci dove si 
impianta e cosa non gli piace).

 impianta e cosa non gli piace).
Il problema a debuggare e' che non ho punti di appoggio.
Siccome php crea quella riga di assegnazione al di fuori dello script
principale non ho idea di come fare il debug. Posso solo mettere un
alert prima ed uno dopo l'istruzione di assegnazione.
Non potrebbe esserci qualche problema di dtd?
grazie
	maxx

 dopo l'istruzione di assegnazione.
beh, ma quello che stai costruendo è un semplice array di oggetti, non 
capisco come possa non accettarlo IE e accettarlo firefox ...
a questo punto posta tutta la stringa generata (se sono più di una, come 
debug, puoi generarne una per volta per capire se ce ne è una in 
particolare che causa problemi)

Il 11/01/2010 18:37, Cristiano Larghi scrisse:

Credo che il problema sia altrove.
O meglio, ho appena risolto un altro problema simile in cui e' coinvolto
un file javascript richiamato da una pagina.
Il file e' molto grande ed e' lo stesso richiamato dalla pagina in cui
si verifica l'errore da cui si e' originato questo thread. Temo che ci
sia qualche errore di sintassi che Firefox non segnala come tale e che
invece blocca il caricamento del file in ie.
Ho provato a spostare la funzione che mi serviva per quella seconda
pagina in un file pulito e l'errore e' scomparso.
L'errore si presentava per del codice del tipo:
<script type="text/javascript">
//<![CDATA[
Event.observe(window, 'load', function(event) { miafunzione() }, false);
//]]>
</script>
Per analogia mi viene quindi il sospetto che il problema stia altrove e,
come al solito, IE lo nasconda bene.
ciao
	maxx

 come al solito, IE lo nasconda bene.
passa il file HTML a JSLint, ti dira' lui.

Il 12/01/2010 10:16, Marco Mariani scrisse:

Provato, ma e' stato alquanto riservato e sibillino. :-)
Si e' bloccato al 5% del file in corrispondenza di una riga dentro <head>
<script type="text/javascript" src="libreria.js"></script>
Ho poi provato ad usare un file javascript piu' snello di quello di cui
ho scritto in un precedente post e l'errore e' sparito.
La causa del mio problema e' quindi qualcosa che non piace a ie in quel
file e non nello script online incriminato.
grazie
	maxx