Newsgroup: it.comp.lang.javascript
Titolo: Errore su send() con explorer

Ho un problema nel codice sotto. Fondamentalmente è un semplice 
utilizzo di ajax.
Su Firefox no problem
Il problema lo da explorer (ho la 6). Ho provato a seguire i passaggi 
dello script mettendo una serie di alert. Il problema dovrebbe essere 
su
myRequest.send(null);
se l'alert lo metto prima l'errore mi compare solo dopo aver cliccato 
su ok.
se lo metto dopo mi compare l'errore e poi l'alert
l'errore è "proprietà o metodo non supportati dall'oggetto"
ho cercato su internet ma non capisco il problema.Il codice sembra 
corretto
nel file .js ho
--------------------------------------------------------
function CreateXmlHttpReq() {
  var xmlHttp;
  try {
    xmlHttp=new XMLHttpRequest();
  } catch (e) {
    try {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        alert("Your browser does not support AJAX!");
        return false;
      }
    }
  }
  return xmlHttp;
}
function ajax (url,myHandler) {
  myRequest = CreateXmlHttpReq();
  myRequest.open("GET",url,true);
  myRequest.onreadystatechange = myHandler;
  myRequest.send(null);
}
function oroscopo() {
    if (myRequest.readyState == 4 && myRequest.status == 200) {
        testo=myRequest.responseText;
        arr_testo=testo.split("%%%");
        document.getElementById('segno').innerHTML=arr_testo[0]+": 
"+arr_testo[1]+" - "+arr_testo[2];
        document.getElementById('testo').innerHTML=arr_testo[3];
        document.getElementById('amore').innerHTML="Amore: "+
((Math.round(50*Math.random()))/10);
        document.getElementById('eros').innerHTML="Eros: "+
((Math.round(50*Math.random()))/10);
        document.getElementById('lavoro').innerHTML="Lavoro: "+
((Math.round(50*Math.random()))/10);
        document.getElementById('denaro').innerHTML="Denaro: "+
((Math.round(50*Math.random()))/10);
        document.getElementById('salute').innerHTML="Salute: "+
((Math.round(50*Math.random()))/10);
    }
}
-----------------------------------------------------
Nella pagina ho
<a href="" onMouseover="ajax('passatempi_oroscopo_ajax.php?
id=1',oroscopo);"></a>

 myRequest.send(null);
myRequest.send("");
-- 
~ Se i sintomi persistono, insultare il medico.

 wrote:


 stesso problema
Allora evidentemente non č quella la riga incriminata. Comunque sia,
usa una stringa nulla al posto del "null". Alcune implementazioni di
XmlHttpRequest non accettano quest'ultimo valore, da qui la risposta
"secca"; supponendo che tu avessi individuato la riga corretta.
A quanto pare l'errore č altrove, forse in "oroscopo". Nonostante IE
abbia una gestione minimalista per quanto riguarda la notifica degli
errori, ti dice quantomeno la riga in cui č successo.
Se non la individui, prova con un po' di debug, cambiando ad esempio
la funzione oroscopo con un semplice alert:
function oroscopo(){
	alert("invocata");
}
Se l'errore sta lě, non dovrebbe piů dartelo, quindi puoi passare a
verificare quale statement della tua funzione non č corretto.
Ti consiglio inoltre di trovare una funzione migliore per istanziare
l'XmlHttpRequest. Qua ne trovi una:
http://groups.google.it/group/it.comp.lang.javascript/browse_thread/thread/5a2dce97888b3f7e/5c669cba12f27f98#5c669cba12f27f98


 
http://groups.google.it/group/it.comp.lang.javascript/browse_thread/t.
..


 migliore?
Primo, non usa try/catch che manda in errore quei browser non
recenti. Se esegui quella funzione su NS4, otterrai un "null"
come valore di ritorno; il codice precedente avrebbe generato
un errore di sintassi. Invece così puoi fare, anche su client
arcaici:
	var xhr = getXmlHttpRequest();
	if ( !xhr )
		alert("Il tuo client non supporta XmlHttpRequest");
E magari fare il redirect da un'altra parte. E poi, i blocchi
try/catch "rallentano".
Secondo, adotta l'approccio dell'object checking.
Terzo, è più semplice. Utilizza solo un ActiveX, e solo se ce
ne è necessità (ovvero siamo sotto windows, unico sistema che
supporta gli ActiveX). Ed il codice scritto è minore.
