Visualizzazione dei risultati da 1 a 2 su 2

Discussione: responseXML nullo

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    45

    responseXML nullo

    Salve a tutti, ho un problema nella gestione dei dati in XML.
    Il codice è questo:

    index.html
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml" lang="it" xml:lang="it">
    <
    head
    <
    meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <
    title>Sito Ecommerce</title>
    <
    link rel="stylesheet" type="text/css" href="stile.css" /> 
    <
    script type="text/javascript" src="ajax.js"></script> 
    </head>
    <body onload="init();"> 
    <div id="messaggio"></div> 
    </body> 
    </html> 
    Il file javascript in ajax è questo:
    Codice PHP:
    function createXMLHttpRequest() {     
         var 
    XHR nullbrowserClient navigator.userAgent.toUpperCase();          if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object")          XHR = new XMLHttpRequest();     
    else if(
    windows.ActiveXObject && browserClient.indexOf("MSIE 4") < 0) {         if(browserClient.indexOf("MSIE 5") < 0)             
    XHR = new ActiveXObject("Msxml2.XMLHTTP");         
    else             
    XHR = new ActiveXObject("Microsoft.XMLHTTP");     }
         return 
    XHR; }
      
    function 
    init() { 
    var 
    http createXMLHttpRequest(); 
    var 
    dataChiamata = new Date(),         
    inizioChiamata dataChiamata.getTime(),     
    massimaAttesa 5,     
    verificaTempoTrascorso
    if(
    http) {
             
    http.open("post""processdata.php"true);
             
    http.setRequestHeader("content-type""application/x-www-form-urlencoded");         /*http.setRequestHeader("connection", "close");*/
             
    http.onreadystatechange = function() {
                    if (
    http.readyState == 4) {
                     
    verificaTempoTrascorso = function(){};
                     if (
    http.status == 200) {
                       var 
    responso http.responseXML;
                       var 
    messaggio document.getElementById("messaggio");
                       if(
    responso) {
                             
    messaggio.innerHTML "<h3> La richiesta asincrona in XML è avvenuta con successo</h3>";
                       } else {
                         
    alert('Errore nella gestione dei dati: ' http.responseText);                   }
                    }
                    } else if(
    massimaAttesa 1000) {
                         
    massimaAttesa massimaAttesa 1000;
                         
    verificaTempoTrascorso = function() {
                             
    dataChiamata = new Date();
                             if((
    dataChiamata.getTime() - inizioChiamata) > massimaAttesa) {                             ajax.onreadystatechange = function(){return;};
                                  
    ajax.abort();
                                  
    ajax document.createElement("p");
                                  
    ajax.innerHTML "Spiacente, richiesta fallita.

                                
    "La prego di ritentare tra qualche istante.";    elemento.appendChild(ajax);
                             } else
                                 
    setTimeout(verificaTempoTrascorso100);                     };
                         
    verificaTempoTrascorso();
                   }
             }
             
    http.send(null); } } 
    e infine il file processdata.php da cui prendo i dati:

    Codice PHP:
    <?php require_once('config.php'); 
    require_once(
    'xmlwriter.php'); 
    $query mysql_query("SELECT * FROM $_CONFIG[articoli]"); 
    $xml = new XMLWriter2(); $xml->push('articoli');
     while(
    $result mysql_fetch_assoc($query)) {
         
    $xml->push('articolo');     $xml->element('codice'$result['codice']); $xml->element('descrizione'$result['descrizione']);
         
    $xml->element('misura'$result['misura']);
         
    $xml->element('categoria'$result['categoria']);
         
    $xml->element('prezzo'$result['prezzo']);
          
    $xml->element('smallfoto'$result['smallfoto']);
         
    $xml->element('bigfoto'$result['bigfoto']);
         
    $xml->element('descest'$result['descest']); 
        
    $xml->pop('articolo');
     }
     
    $xml->pop();
     print 
    $xml->getXml();
     
    ?>
    Il problema è questo, ogni volta che faccio una richiesta asincrona, il server risponde correttamente con un file xml ben formato e fornito di tutti i dati del database ma in javascript responseXML sembra risultare nullo.
    Capisco che nessuno voglia sbattersi a comprendere il codice ma mi basta anche sapere da dove cominciare a vedere per risolvere il problema, grazie.

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Prova a fare un debug passo per passo, ovvero controlla se i vari oggetti per la richiesta siano creati correttamente, la variable http è creata corretamente? Inserendo un alert(http) dopo averla creata dovrebbe esserti di aiuto.

    Se usi firefox con firebug sarebbe ancora meglio in quanto il plugin ti segnalerebbe eventuali errori in basso a destra della finestra.

    Leggendo alla veloce il tuo codice mi sembra un po' strana la gestione della variabile verificaTempoTrascorso, prova ad ometterla.

    Inoltre, so che potrebbe sembrarti la via più difficile, ma ti consiglio di usare la libreria jQuery per effettuare le richieste ajax ( ma non solo ) risparmieresti davvero molte decine di righe di codice ottenendo un risultato sicuramente più stabile su tutti i maggiori browser.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.