Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it L'avatar di flessciato
    Registrato dal
    Jun 2002
    Messaggi
    1,522

    Problema con AJAX e PHP su chiamate

    Ho un problema ad implementare Ajax con php5+mysql5.
    Ho la mia funzione XHR Javascript, un file rpc.php per gestire le chiamate di javascript e una tabella da cui estraggo i dati i quali andranno messi dentro un campo di un form con innerHTML. Mi sono basato sul codice trovato su Mozilla.

    Facendo delle prove (ora posto anche tutto il codice) succede che
    1) su mozilla da problemi: non visualizza il risultato. Da anche un problema in console ma ho letto su mozdev che è normale per Firefox >1.5.
    2) su iexplorer 6 invece visualizza l'alert con alert(http_request.responseText); ma poi quando clicco ok il risultato sparisce anche dalla pagina
    3) se tolgo l'alert non riesco a capire come mai il risultato compaia per un millisecondo e poi sparisca improvvisamente. E' come se, venendo distrutto l'oggetto httpRequest, dopo la chiamata alla funzione facesse sparire anche l'output.
    4) un'altra cosa che non capisco è come mai il codice javascript delle volte (con l'alert abilitato) non venga eseguito. SEMBRA che il codice javascript sia più veloce ad eseguirsi della chiamata al file php che si estrae i dati e quindi termina prima che ci siano effettivamente questi dati.
    Ho riletto il codice ma: la funzione non dovrebbe aspettare l'output da php prima di andare avanti quando do http_request.open('GET', 'rpc.php?artista='+url, true);?? quando faccio http_request.open è come se NON ASPETTASSE il risultato ed andasse avanti da solo.

    il codice è

    JAVASCRIPT
    _____________________
    codice:
    function makeRequest(url) {
    
            var http_request = false;
    
            if (window.XMLHttpRequest) { // Mozilla, Safari,...
                http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                    http_request.overrideMimeType('text/xml');
                }
            } else if (window.ActiveXObject) { // IE
                try {
                    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
            if (!http_request) {
                alert('Giving up :( Non riesco a creare una istanza XMLHTTP');
                return false;
            }
         	http_request.onreadystatechange = function() { alertContents(http_request); };
           http_request.open('GET', 'rpc.php?artista='+url, true);
           http_request.send(null);
        }
    
        function alertContents(http_request) {
            if (http_request.readyState == 4) {
                if (http_request.status == 200) {
    				document.getElementById("mio_artista").innerHTML = http_request.responseText;
                    alert(http_request.responseText);
    				http_request=null;
                } else {
                    alert('Si è verificato un problema con la richiesta');
                }
            }
    
        }
    INDEX.PHP
    _____________________

    codice:
    <?php
    header( "Cache-Control: no-cache" ); 
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="Cache-Control" content="no-cache">
    <title>Documento senza titolo</title>
    <script src="ajax.js"></script>
    </head>
    
    <body>
    <form id="myform" name="myform" method="get">
      <table width="434" border="0" cellpadding="0">
        <tr>
          <th width="43" scope="row"><label>artista</label></th>
          <td width="339"><input type="text" name="artista" />
    	  <script type="text/javascript">
    		  function cerca_artista(){
    		  var nome_artista_url = document.myform.artista.value;
    		  makeRequest(nome_artista_url);
    		 //document.write(nome_artista+"
    ");//DEBUG
    		}
    	  </script>
    	 <input type="submit" value="Cerca" onclick="cerca_artista()"/></td>
        </tr>
        <tr>
          <th scope="row"></th>
          <td>
    	  <span id="mio_artista"><input name="artista_choose" type="radio" /></span>
    	   </td>
        </tr>
      </table>
    </form> 
    </body>
    </html>
    RPC.PHP
    _________________
    codice:
    <?php
    header( "Cache-Control: no-cache" ); 
    include("db_setup.php");
    $my_artist=isset($_GET['artista']) ? ($_GET['artista']) : "0";
    //echo $my_artist;
    $conn = mysql_connect($myServer,$myUser,$myPassword) or
       die("Connessione non riuscita: " . mysql_error());
    mysql_select_db("prova") or
       die("non seleziona il database: " . mysql_error());
    $my_query="SELECT * FROM artisti WHERE nome_artista LIKE '".$my_artist."%'";
    //echo $my_query."
    ";
    $result=mysql_query($my_query) or
       die("non fa la query: " . mysql_error());
    //echo $result."
    ";
    while($row = mysql_fetch_assoc($result)){
    		echo "<input name=\"artista_choose\" type=\"radio\" />".$row["nome_artista"]."
    ";
    }
    mysql_free_result($result);
    ?>
    Slack 10 - Apple G5 2.5 - winzoz xp
    php/mysql/apache
    Flash MX / roba in 3D / roba per il video e l'audio

  2. #2
    hai provato a fare un pò di debug lato server ?

    oltre a questo prova a non usare l'overrideMimeType ed a eliminare la forzatura a null di una variabile a scope locale che a readyState ultimato non avrà più motivo di esistere
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it L'avatar di flessciato
    Registrato dal
    Jun 2002
    Messaggi
    1,522
    ciao Andrea, grazie del consiglio. Ora provo come mi hai indicato. Un secondo che ti dico ...
    Slack 10 - Apple G5 2.5 - winzoz xp
    php/mysql/apache
    Flash MX / roba in 3D / roba per il video e l'audio

  4. #4
    Utente di HTML.it L'avatar di flessciato
    Registrato dal
    Jun 2002
    Messaggi
    1,522
    ok

    ho riscritto così
    codice:
    // JavaScript Document
    	function makeRequest(url) {
            var http_request = false;
    http_request = new XMLHttpRequest();
            if (window.XMLHttpRequest) { // Mozilla, Safari,...
                //http_request = new XMLHttpRequest();
            /*if (http_request.overrideMimeType) {
                    http_request.overrideMimeType('text/xml');
                    
                }*/
            } else if (window.ActiveXObject) { // IE
                try {
                    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
    
            if (!http_request) {
                alert('Giving up :( Non riesco a creare una istanza XMLHTTP');
                return false;
            }
         	http_request.onreadystatechange = function() { alertContents(http_request); };
           http_request.open('GET', 'rpc.php?artista='+url, true);
           //http_request.open('GET', url, true);
           http_request.send(null);
    
        }
    
        function alertContents(http_request) {
    		/*if (http_request.readyState == 1) {
    			document.getElementById("mio_artista").innerHTML = 'Loading...';
    			}
    		if (http_request.readyState == 2) {
    			document.getElementById("mio_artista").innerHTML = 'Loading... 2';
    			}
    		if (http_request.readyState == 3) {
    			document.getElementById("mio_artista").innerHTML = 'Loading... 3';
    			}*/
            if (http_request.readyState == 4) {
                if (http_request.status == 200) {
    				document.getElementById("mio_artista").innerHTML = http_request.responseText;
                    //alert(http_request.responseText);
    				//distruggo l'oggetto request
    				//http_request=null;
                } else {
                    alert('Si è verificato un problema con la richiesta');
                }
            }
        }
    Ma non funziona. Tolto override ed eliminata la forzatura a nul come hai giustamente segnalato.

    Con FireBug (che uso...) mi da una volta su 6/7 un errore di questo tipo

    [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame

    la riga è questa

    if (http_request.status == 200) {

    ma non capisco perchè. E' un normalissimo controllo di stato del XHR :master:
    Slack 10 - Apple G5 2.5 - winzoz xp
    php/mysql/apache
    Flash MX / roba in 3D / roba per il video e l'audio

  5. #5
    Utente di HTML.it L'avatar di flessciato
    Registrato dal
    Jun 2002
    Messaggi
    1,522
    ho provato per scrupolo a vedere se la funzione ajax si prende il parametro togliendo le varie funzioni XHR e mettendo solo

    function makeRequest(url) {
    alert("in ajax.js viene passato correttamente il parametro: "+url);
    }

    E funziona! Quindi il parametro viene correttamente inviato al file XHR

    Quindi il problema è nel file Ajax. Io l'ho postato, e ho fatto anche le modifiche che mi hai consigliato ma non sembra funzionare :master:

    sono disperato
    Slack 10 - Apple G5 2.5 - winzoz xp
    php/mysql/apache
    Flash MX / roba in 3D / roba per il video e l'audio

  6. #6
    Utente di HTML.it L'avatar di flessciato
    Registrato dal
    Jun 2002
    Messaggi
    1,522
    Andrea, ho implementato la tua classe. Funziona perfettamente.

    Il parametro viene passato al server in modo corretto e me lo scrive anche nel report (fico sto giocattolo )

    non so veramente cosa fare...
    Slack 10 - Apple G5 2.5 - winzoz xp
    php/mysql/apache
    Flash MX / roba in 3D / roba per il video e l'audio

  7. #7
    Utente di HTML.it L'avatar di flessciato
    Registrato dal
    Jun 2002
    Messaggi
    1,522
    ma come si fa a dire a javascript di aspettare l'elaborazione del file rpc.php prima di dare l'output?! secondo me il problema è li perchè usando l'alert a volte funziona e volte no. Secondo me il problema sta nel fatto che la funzione non aspetta l'output da php e termina senza valori. COn l'alert questo è evidente
    Slack 10 - Apple G5 2.5 - winzoz xp
    php/mysql/apache
    Flash MX / roba in 3D / roba per il video e l'audio

  8. #8
    codice:
    function makeRequest(url) {
    	var	xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    	xhr.open("get", "rpc.php?artista=" + encodeURIComponent(url), true);
    	xhr.onreadystatechange = function(){
    		if(xhr.readyState == 4) {
    			alert(xhr.status);	// da commentare poi ma almeno ti dice lo status
    			if(xhr.status == 200 && !!xhr.responseText)
    				document.getElementById("mio_artista").innerHTML = xhr.responseText;
    			else
    				alert([
    					"Something wrong", 
    					"Status: ".concat(xhr.status),
    					"Response: ".concat(xhr.responseText)
    				].join("\n"));
    		}
    	};
    	xhr.send(null);
    };
    
    
    
    
    <?php
    ob_start();
    header( "Cache-Control: no-cache" ); 
    include("db_setup.php");
    $output = '';
    $my_artist = isset($_GET['artista']) ? mysql_real_escape_string($_GET['artista']) : "0";
    $conn = mysql_connect($myServer,$myUser,$myPassword) or die("Connessione non riuscita: " . mysql_error());
    mysql_select_db("prova") or die("non seleziona il database: " . mysql_error());
    $my_query = "SELECT * FROM artisti WHERE nome_artista LIKE '{$my_artist}%'";
    $result = mysql_query($my_query) or die("non fa la query: " . mysql_error());
    while($row = mysql_fetch_assoc($result)) {
    	$output .= "<input name=\"artista_choose\" type=\"radio\" />{$row['nome_artista']}
    ";
    }
    mysql_close($result);
    exit($output);
    ?>

    [edit]
    non è che stai tendando di modificare la form di un i-frame ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    Utente di HTML.it L'avatar di flessciato
    Registrato dal
    Jun 2002
    Messaggi
    1,522
    1) non funziona
    2) no, assolutamente. Semplicissimo form.
    L'errore che mi da è questo

    [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame ::

    ed è qui

    if(xhr.status == 200 && !!xhr.responseText)

    Ho letto il tuo codice... mi sembra valido pure questo... anzi, è anche più breve (quindi magari più veloce e con meno richiami a funzioni varie). Intanto grazie mille... speriamo di risolvere perchè sto bollendo!!!
    Slack 10 - Apple G5 2.5 - winzoz xp
    php/mysql/apache
    Flash MX / roba in 3D / roba per il video e l'audio

  10. #10
    c'è qualcosa che non va ... hai provato con un codice facile facile tipo ...
    codice:
    <?php
    echo "Hello World";
    ?>
    ??? se questo funziona e funziona sempre significa che il problema è sul server, o per meglio dire sul codice ...


    [edit]
    prova con più browsers ... magari ti si è solo impallato FireFox con qualche estensione
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.