non esegue sempre la chiamata al server

  • Creatore Discussione Creatore Discussione amhal
  • Data di inizio Data di inizio

amhal

Utente Attivo
17 Feb 2011
89
1
8
Ciao a tutti, premetto che non conosco Ajax, il problema è il seguente:
ho la necessità di inserire e visualizzare dei dati tramite php/mysql in tempo reale senza refresh della pagina.
Ho scaricato uno script da internet che funziona benissimo per inserire i dati, ma da qualche problema per la
visualizzazione. Infatti quando faccio un inserimento, sotto dovrebbe visualizzare la lista dei nominativi presenti nel db, a volte lo fa a volte non visualizza l'ultimo record (anche se nel db è stato inserito), dopo 2 o tre inserimenti successivi, finalmente li fa vedere tutti. Non capisco perché, posto il codice delle tre pagine.

index.php

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script type="text/javascript" src="jquery-1.6.2.min.js"></script>
<script type="text/javascript"> 
$(document).ready(function() { 

  //al click sul bottone del form 
  $("#bottone").click(function(){ 

    //associo variabili 
    var nome 	= $("#nome").val(); 
    var cognome = $("#cognome").val();
	var pz 		= $("#pz").val(); 	

  //chiamata ajax 
    $.ajax({ 

     //imposto il tipo di invio dati  
      type: "POST", 

      //Invio i dati alla pagina php 
      url: "risultato_aggiunta.php", 

      //Dati da salvare 
      data: "nome=" + nome + "&cognome=" + cognome + "&pz=" + pz, 
      dataType: "html", 
     
    }); 
  }); 
}); 



 $(document).ready(function() {
 $("#bottone").click(function() {
  $("#dati").load("mostra.php", {
  });
 });
});  


</script>  
<body>


<form name="modulo"> 
    <p>Nome</p> 
    <p><input type="text" name="nome" id="nome"> 
    <p>Cognome</p> 
     <input type="text" name="cognome" id="cognome"> 
	 <p>pz</p> 
	 <input type="text" name="pz" id="pz"> 
	 <br /><br />
    <input type="button" id="bottone" value="Invia i dati"> 
	<input type="reset" value="nuovo">

<div id="dati">
</div> 
</form> 

</body>
</html>

risultato_aggiunta.php ( è la pagina che inserisce i dati tramite php nel db mysql )

PHP:
<?php
$host = 'localhost';
$user = 'root';
$pass = 'password';

$db = mysql_connect($host,$user,$pass);
mysql_select_db('prova');

$cognome = $_POST['cognome']; 
$nome = $_POST['nome']; 
$pz = $_POST['pz']; 

$query = "INSERT IGNORE into dati(cognome,nome,pz) values('$cognome','$nome','$pz')";
$result= mysql_query($query,$db);
mysql_close($db); 

?>


mostra.php (la pagina che mostra il contenuto del db nel <div id="dati"> presente nella index )

PHP:
<?php

$host = 'localhost';
$user = 'root';
$pass = 'password';


$db = mysql_connect($host,$user,$pass);
mysql_select_db('prova', $db);

$query=" SELECT * FROM dati ";

$result = mysql_query($query);

while($row = mysql_fetch_array($result))
 {
 
 $id 	= $row['id'];
 $nome 	= $row['nome'];
 $cognome = $row['cognome'];
 
 echo $id.' '.$nome.' '.$cognome.'<br />';
 
 }

?>

spero di essere stato chiaro e vi ringrazio in anticipo
:fonzie:
 
Ciao, probabilmente hai già risolto ma posto comunque una soluzione
Non ha senso ripetere due volte i metodi ready() e click()
Nel codice javascript che hai postato c'è una virgola in più.
Puoi utilizzare il metodo done() accodato alla chiamata ajax per eseguire del codice dopo che la chiamata è andata a buon fine.
Ho aggiunto la chiamata a mostra.php 2 volte : al caricamento della pagina ( cosi vedi subito i dati caricati) e in coda alla chiamata per l'inserimento
Codice:
<script type="text/javascript"> 
    $(document).ready(function() {
        $("#dati").load("mostra.php");
        //al click sul bottone del form 
        $("#bottone").click(function(){ 
            //associo variabili 
            var nome 	= $("#nome").val(); 
            var cognome = $("#cognome").val();
            var pz = $("#pz").val();
            //chiamata ajax 
            $.ajax({
                //imposto il tipo di invio dati  
                type: "POST",
                //Invio i dati alla pagina php 
                url: "risultato_aggiunta.php",
                //Dati da salvare 
                data: "nome=" + nome + "&cognome=" + cognome + "&pz=" + pz, 
                dataType: "html"
     
            }).done(function(){
                $("#dati").load("mostra.php");
            }); 
        }); 
    });
</script>
 

Discussioni simili