XMLHTTP che funziona solo a metà

  • Creatore Discussione Creatore Discussione mgigio
  • Data di inizio Data di inizio

mgigio

Nuovo Utente
3 Mag 2007
11
0
0
Ciao a tutti, sono nuovo, anche se avendo letto spesso i post nei vari forum, mi sento un po' di casa. Approfitto del primo messaggio per complimentarmi con tutti voi ma in realtà ho bisogno anche di una vostra opinione su un caso per me insolubile.

Provando a realizzare la mia prima applicazione in ajax mi sono imbattuto in uno strano comportamento in IE6. Devo premettere che uso esclusivamente Firefox e Opera, e testando il mio script su entrambi questi browser non ho avuto problemi.

Lo script si limita a creare un oggetto XmlHttpRequest, ho utilizzato praticamente tutte le più diffuse soluzioni cross-browser che ho trovato in rete (una per volta, ovviamente!).

Il comportamento per me inspiegabile è questo: aprendo la pagina con lo script in ie6, questo riesce a creare l'oggetto Msxml2.XMLHTTP nel caso in cui accedo al file html direttamente da file system (file:///c:\etc\etc) , mentre mi dà errore (impossibile creare l'oggetto) se lo apro tramite web server (apache 2.0 su xp).

Ho potuto inoltre testare lo script direttamente in internet da un sito che lo implementa (non so con quale server), e anche in questo caso funziona tutto. E' evidente che mi sono perso qualcosa.

Chi mi può illuminare al riguardo?

Grazie a tutti coloro che avranno la pazienza di chiarirmi le idee
 
up

Benissimo, vista la mole di interventi in questa discussione immagino di essere l'unico ad avere questo problema. Allora provo a modificare la domanda.

L'oggetto xmlhttp è creato dal browser, giusto?

In che modo può influire l'origine di una pagina sull'esecuzione di script lato client?

Ho pensato a un problema di impostazioni di protezione. Ovviamente ho cercato di porvi rimedio cercando di modificare le impostazioni senza risultato.

Inoltre come dicevo il problema non si verifica sempre accedendo a siti esterni.

Nessuna dritta?
 
Msxml2.XMLHTTP

Ciao Mgigio,

La prima cosa che mi viene in mente è chiederti di riverificare gli oggetti supportati da Microsoft, non credo sia quello in oggetto, provo a postarti il codice che utilizzo io:
Codice:
    // codice per Mozilla, etc.
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
        if(xmlhttp.overrideMimeType) {xmlhttp.overrideMimeType('text/xml');}
    }
	// codice per  IExplore
	else if (window.ActiveXObject)
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (xmlhttp&&(url!=""))
    {
        xmlhttp.onreadystatechange = xmlhttpChange;
        xmlhttp.open("POST",url,true);
        xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlhttp.send(params);
    }
    else
    {
        alert(xmlhttp+" "+url+" "+args.length);
    }
}

function xmlhttpChange()
{
    // if xmlhttp shows "loaded"
    if (xmlhttp.readyState==4)
    {
        // if "OK"
        if (xmlhttp.status==200)
        {          document.getElementById("divId").innerHTML = xmlhttp.responseText;
        }
        else
            alert("unable to get data!");
    }
}

Dove url = pagina da chiamare e params = parametri da passare a tale pagina...

Verifica inoltre di chiamare pagine appartenenti allo stesso dominio dove risiede la parte javascript, tutti gli oggetti XHR hanno delle "limitazioni" di sicurezza con le quali mi sono scornato per un mio progetto, insomma non consentono il cross-domain.

:byebye:
 
Grazie mille per i consigli (ormai non ci speravo più). Ho appena provato il codice che hai postato. Purtroppo il problema rimane. In effetti ho un errore in corrispondenza di questa riga:

Codice:
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
anche nella variante:
Codice:
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

So che ci sono restrizioni relative al dominio, ma nel mio caso i file sono tutti nella stessa cartella.

Come dicevo il problema si presenta solo se accedo alla pagina tramite apache, mentre se apro il file direttamente in ie funziona tutto (salvo non poter caricare gli elementi generati lato server, ovviamente). Questo mi porta a rispondere al tuo consiglio di riverificare il supporto dei vari oggetti, che anche in queso caso sembra tutto a posto.

Comunque se sono l'unico ad avere questo problema, forse posso mettere tutto in rete confidando che su altri computer funzioni tutto a dovere.

In ogni caso ti sono grato dei suggerimenti e spero che vorrai mandarmene altri, non credo altrimenti di venirne a capo da solo.
 
Caspiterina... Abbastanza incomprensibile!

Posso solo consigliarti come ultimo tentativo di utilizzare prototype.js che funziona in tutto il mondo. Lo puoi scaricare di qui.

:byebye:
 
Ciao ArtCava, grazie anche per questo suggerimento che seguirò sicuramente.

Avevo anche pensato di rinunciare all'oggetto xmlhttp seguendo il post di gmniko PHP AJAX senza XMLHTTPRequest, però come potrai immaginare oltre a realizzare il mio progetto vorrei anche capire dove sbaglio.

Ti darò notizie non appena avrò provato prototype e ti ringrazio ancora per la disponibilità.
 
Ciao ArtCava,
non va molto bene, sto ancora studiando prototype ma l'ho provato e ho già potuto verificare che su opera e ff funziona, mentre continuo ad avere problemi su ie.

A questo punto mi convinco sempre più che sia un problema di impostazioni.

Sono contento che almeno tu hai ottenuto quello che volevi.

Se risolvo ti faccio sapere, in fondo potrebbe capitare anche ad altri. Grazie dell'aiuto
 

Discussioni simili