Newsgroup: it.comp.lang.javascript
Titolo: Ajax ed Internet Explorer: Errore da mal di testa

Tempo fa ho chiesto aiuto una mano per individuare un errore strano
che avevo su Explorer e non su Firefox. Ho seguito il vostro consiglio
e dopo circa 500 alert disseminati nel codice ho trovato la linea di
codice che fallisce, posto il codice nella speranza che qualcuno
sappia propormi una soluzione.
Premetto che:
Lato server ho un'applicazione PHP che interroga mySql e restituisce
codice Javascript questo codice viene passato dinamicamente alla
funzione che ajax chiama come callback alla sua request,
Ecco il codice:
/*
La funzione che richiamo centinaia di volte all'interno del sito
url=e' l'url da aprire con dentro i valori da passare al codice php
methos=nel mio caso e' sempre uguale a GET
callback=e' il nome della funzione da richiamare in callback quando
arriva la risposta dal server
asyn=e' un flag per sapere se la richiesta deve essere bloccante o
meno
*/
function ajaxRequest(url, method, callback, asyn){
	// Uso questo codice per controllare il browser
	try {
	    var xmlhttp = eval("new ActiveXObject('Microsoft.XMLHTTP');");
  	} catch(e){
             try{
      	     var xmlhttp = eval("new XMLHttpRequest();");
           } catch(e){
	      alert("Questo browser non supporta AJAX");
	      var xmlhttp = false;
    	   }
  	}
    xmlhttp.open(method, url, asyn);
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-
urlencoded; charset=UTF-8"');
    if(asyn){
	    xmlhttp.onreadystatechange = function() {
	        if (xmlhttp.readyState == 4 && callback != null){
			/*
			qui dentro salvo la risposta
			la risposta contiene codice javascript quasi sempre il testo per
                        istanziare un array associativo piu' raramente
istanzia piu' di un array
			*/
	                var text = xmlhttp.responseText;
                        //************************** QUI DA L'ERRORE
***********************************
                        eval(callback+"(text)");
                        //************************** QUI DA L'ERRORE
***********************************
	        }
	    }
    }
    xmlhttp.send(null);
    return xmlhttp;
}
quello che cerco di fare e che con Firefox funziona regolarmente e'
eseguire una funzione passandogli una stringa, il nome della funzione
mi viene passato e la stringa e' costituita da codice javascript con
dentro tutto quello che serve per istanziare un array associativo
pieno di valori, con parentisi tonde e graffe, virgolette singole e
doppie ecc ecc
Che posso fareeeeee???
Grazie a tutti in anticipo
Ivan

Dimenticavo... il php restituisce codice javascript ma non uso Json...
tutto artigianale, spero che l'errore non derivi da quello.

   eval(callback+"(text)");
   eval( callback + "(" + text + ")" );
M

    eval( callback + "(" + text + ")" );
con questo invece propone un piu' comune:
Errore di sintassi
Smette di funzionare anche firefox e mi stampa:
syntax error: fileManagwer.retrieveDataCallback(var response = new
Array();
L'errore appare chiaro, passo alla funzione qualcosa che non e' una
stringa quindi appena trova un punto e virgola si incasina
Se metto le virgolette e quindi scrivo
eval( callback + "(\"" + text + "\")" );
si incasina quando trova una virgoletta doppia dentro la stringa
idem se uso virgolette singole

 previsto identificatore stringa o nomero
Avevi detto che il server restituiva codice Javascript, percò ho pensato che
volessi inserirlo nell'eval. Ovviamente se text non contiene un'espressione
Javascript, il mio suggerimento è sbagliato.
Ma se devi semplicemente invocare una funzione passando il testo restituto
dal server, perché usi un eval? Invoca direttamente la funzione passando
text come primo argomento. Qual è il problema? Ovviamente, 'callback' dovrà
essere un riferimento a una funzione, non una stringa con il *nome* di una
funzione.
Max

 	    var xmlhttp = eval("new ActiveXObject('Microsoft.XMLHTTP');");
[cut]
Ti rinnovo quello che ho scritto nel post precedente per la questione
dell'uso spropositato di eval.
Come ti ho già detto, devi verificare che cos'è che passi realmente a
IE. Magari è il tipo di encoding diverso, magari c'è un carattere che
lui non digerisce o altro. Gestisci l'errore:
try{
	eval(yourCode);
catch(e){
	alert(e.message+"\r\n\r\n"+yourCode);
}
In questo modo scopri il testo che gli da noia.
Meglio ancora, se invece di un alert lo visualizzi sulla pagina (come
value di una textarea).
-- 
~ Non esistono donne brutte. Dipende solo da quanta vodka bevi.
(proverbio russo)

 Javascript, il mio suggerimento è sbagliato.
il server restituisce testo contentenente codice javascript
ovvero le istruzioni per istanziare e riempire un array
queste istruzioni comprendono andate a capo, punti e virgola,
parentesi, viroglette e ovviamente i dati da inserire nell'array.
Cmq sto provando a cambiare il tutto. Ho reso tutte le chiamate ajax
sincrone, in modo da non dover
richiamare dinamicamente una funzione di callback ma posso
direttamente eseguire codice dopo la request. Continua a darmi errori
ma mi pare possa funzionare
n.d.r. Firefox va sempre invece molto bene, essendo tutto sincrono si
incastra un secondo prima di visualizzare la pagina ma non stampa
errori e va liscio
grazie