Mysql
 sql >> Base de données >  >> RDS >> Mysql

Soumettre le formulaire ajax et rester sur la même page ne fonctionne pas

Le formulaire est soumis et ne reste pas sur la même page en raison de l'attribut d'action sur le formulaire et du bouton de soumission normal.

Ce qui mène à votre .submit() méthode incluant .preventDefault() probablement pas interprété après le chargement du code HTML non plus.

Vous pourriez faire quelque chose dans ce sens :

<html>
  ...
  <body>
  ...
    <form id="formA" action="test.php" method="post" enctype="multipart/form-data">
      <input id="commentData" name="commentData" type="text" />
      <input type="submit" value="toDb" id="toDB" name="toDB" />
    </form>
  ...
  </body>
  <script>
   ...script here...
  </script>
 </html>

Et le javascript pourrait être quelque chose comme :

( function( $ )
  {
    var submit = $( 'input[id=toDB]' );
    $( submit ).on
    (
      'click',
      function( event )
      {
        event.preventDefault();
        var form = $( this ).parent();

        // Get form fields
        var data = $( form ).serializeArray(), obj = {}, j = 0;
        for( var i = 0; i < data.length; i++ )
        {
          if( data[i].name in obj )                                                                  
          {
            var key = data[i].name + '_' + j;
            obj[key] = data[i].value;
            j++;
          }
          else
          {
            obj[data[i].name] = data[i].value;
          }
        };

        // Make AJAX request
        $.ajax
        (
          {   
            url: $( form ).attr( 'action' ),    
            type: 'POST',
            data: 'toDB=' + JSON.stringify( obj ),    
            success: function( data, textStatus, xhr )
            {
              // Do something with data?
              ...    
              alert( 'ok' );    
            }
          }
        );
      }
    );
  }( jQuery )
);

Voir le jsfiddle pour vous-même.

Vous pouvez dire que cela fonctionne parce que vous obtenez une erreur de console indiquant que la destination de la demande est introuvable - 404 - bien que la page ne s'actualise pas, vous restez là où vous êtes... avec une page appropriée à soumettre, elle fonctionne pleinement.

MODIFIER

J'ai modifié le paramètre de 'data' dans le ajax() call pour que les champs du formulaire soient définis comme une chaîne json dans une variable POST [toDB].

Donc dans votre PHP vous feriez :

$datas = json_decode( $_POST['toDB'], true );

Et maintenant vos $datas variable est un tableau associatif contenant tous les noms et valeurs de vos champs de formulaire. Je ne suis pas à 100 % sur cette prochaine déclaration, mais vous devrez peut-être utiliser les stripslashes() de PHP méthode sur les données POSTED avant d'utiliser json_decode()

c'est-à-dire :

//Connect to database server
mysql_connect( "localhost", "user", "" ) or die ( mysql_error() );
mysql_select_db( "test" ) or die( mysql_error() );
$strSQL = "SELECT * FROM comments order by RAND() LIMIT 5";
$rs = mysql_query( $strSQL );

if( !$rs ) 
{
  echo 'Could not run query ' . mysql_error();
  exit;
}

$dt1=date("Y-m-d");

if( isset( $_POST['toDB'] ) )
{
  $datas = json_decode( stripslashes( $_POST['toDB'] ), true );
  $dataA = $datas['commentData'];
  $sql = "INSERT INTO comments( id, comment, datum )VALUES( DEFAULT, '" . $dataA . "', '" . $dt1 . "' );";
  $result=mysql_query( $sql );
}
mysql_close();

J'espère que ça aide