Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [ajax] carico pagina esterna... non funzionante

    Ciao a tutti. Me lo aspettavo, questo mio codice funziona alla grande con Opera e Firefox ma non con Explorer.
    Devo caricare una piccola pagina dinamicamente tramite ajax.
    Ho strutturato la prima parte in questo modo, in un file .js separato perchè mi serve anche in altri punti del sito:

    codice:
    function ajax() {
    	var xmlHttp;
    	try {
    		// Firefox, Opera 8.0+, Safari
    		xmlHttp = new XMLHttpRequest();
    		return xmlHttp;
    	}
    	catch (e) {
    	  // Internet Explorer
    		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;
    			}
    		}
    	}
    }
    Come vedete, oltre ad essere stato copiato da w3schools, questa funzione ritorna un oggetto xmlHttp.
    All'interno della pagina nella quale devo caricare il contenuto dinamico, uso questo codice:

    codice:
    	function reveal() {
    		//chiamo la funzione ajax che mi restituisce l'oggetto xmlHttp
    		xmlHttp = ajax();
    		//e quindi parto con le request
    		xmlHttp.onreadystatechange = function() {
    			if (xmlHttp.readyState == 4) {
    				document.getElementById('hid').innerHTML = xmlHttp.responseText;
    			}
    		}
    		xmlHttp.open("POST","ricercaQuick.php",true);
    		xmlHttp.send(null);
    	}
    Come vedete utilizzo la funzione ajax() che ho importato dall'esterno.
    Nessun problema eccetto Explorer che mi comunica un errore nella visualizzazione della pagina, in particolare:

    errore di runtime sconosciuto
    codice 0

    Io ho sempre saputo che gli apici fanno casino, ho provato a smanettare un po' ma senza risultati.
    Sapreste suggerirmi qualche via? Io vi ringrazio in anticipo e mi scuso per la lunghezza eccessiva.


  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Attenzione l'invio dati tramite post è differente dall'invio tremite get.
    http://javascript.html.it/guide/lezi...afica-clienti/
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Ciao, grazie per il suggerimento! Ma se è così diverso il metodo significa che Opera e FF sono più tolleranti? Mi sembra strano però :master:

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    pero' fai un po' di debug,
    vedi fin dove arriva, cosa invia, cosa riceve

    per esempio nel tuo codice non ti poni neanche il problema di verificare lo status della richiesta,
    se il readystate e' 4 procedi
    ma se poi hai sorprese, come in questo caso, ti e' difficile individuare il problema

    (http://javascript.html.it/guide/lezi...-parametri-ii/ <- listato 13)

  5. #5
    Hi xinod, hai ragione. Un po' di debugging mi ha portato a scoprire che nella seconda parte di codice, questo passaggio

    codice:
    	//chiamo la funzione ajax che mi restituisce l'oggetto xmlHttp
    	xmlHttp = ajax();
    su Explorer fa ottenere un "undefined" all'interno di xmlHttp. Sto cercando di capire se a IE non piace questo tipo di passaggio e vuole tutto in un colpo solo (ma non credo) o ci sono problemi nel blocco try-catch nella funzione ajax(). :master:

  6. #6
    Ok, dopo aver corretto diversi errori logici nel mio codice sono arrivato a scoprire che il passaggio

    codice:
    document.getElementById('hid').innerHTML = xmlHttp.responseText;
    fa casino.
    Dirò di più; ho provato a far eseguire una cosa del tipo

    codice:
    document.getElementById('hid').innerHTML = "blabla";
    e tranquillamente è comparso "blabla" nell'elemento con id specificato.
    Ho provato anche a stampare il responseText tramite alert e il contenuto era quello che mi aspettavo. Insomma, explorer sembra non voler passare a innerHTML un responseText.
    Explorer 7.


    :master:

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    document.getElementById('hid').innerHTML = xmlHttp.responseText;
    Con IE7, questa istruzione mi dà un errore, credo non gestibile neanche inserendola nel blocco try_cach, se responseText contiene l'html di una pagina intera (<html>.......</html>)
    Pietro

  8. #8
    Esatto.
    Ma com'è possibile, se questo è il metodo standard (usato anche su w3schools) per caricare dinamicamente una pagina?

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Tobler
    Esatto.
    Ma com'è possibile, se questo è il metodo standard (usato anche su w3schools) per caricare dinamicamente una pagina?
    :master: che io sappia, innerHTML è stata inventata proprio dalla Microsoft per IE. Che io sappia (corregete se sbaglio) non è standard. Sicuramente l'implementazione che ne hanno fatto per Firefox e Opera è migliore
    Pietro

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    C'è da complimentarsi proprio con certi progettisti


    <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
    <hr />
    <div id="div1"></div>

    se tento di mettere una intera pagina, CHE CONTIENE UN FORM, dentro div1 mi funziona pure con IE7


    Se però racchiudo div1 dentro un form:

    <form name="form1" method="post" action="Default.aspx" id="form1">
    <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
    <hr />
    <div id="div1"></div>
    </form>

    allora ottengo il bellissimo errore: errore di runtime sconosciuto

    :rollo: Insomma, c'è da spassarsela




    ps. confermo che con Firefox e Opera funziona



    Edit: confermo che il div che deve contenere l'intera pagina, NON DEVE ESSERE DENTRO UN FORM. Così mi pare funzioni pure con IE7. Fai sapere
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.