sql >> Base de Datos >  >> RDS >> Mysql

Envíe el formulario ajax y permanezca en la misma página que no funciona

El formulario se envía y no permanece en la misma página debido al atributo de acción en el formulario y al botón de envío normal.

Lo que lleva a su .submit() método que incluye .preventDefault() probablemente tampoco se interprete después de cargar el html.

Podrías hacer algo similar a esto:

<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>

Y el javascript podría ser algo así como:

( 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 )
);

Consulte el jsfiddle por ti mismo.

Puede decir que está funcionando porque recibe un error de la consola que indica que no se encuentra el destino de la solicitud - 404 - aunque la página no se actualiza, permanece justo donde está... con una página adecuada para enviar, funciona completamente.

EDITAR

Modifiqué la configuración de 'datos' en ajax() llame para que los campos del formulario se establezcan como una cadena json en una variable POST [toDB].

Así que en tu PHP harías:

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

Y ahora tus $datas variable es una matriz asociativa que contiene todos los nombres y valores de los campos de formulario. No estoy al 100% en esta siguiente declaración, pero es posible que deba usar stripslashes() de PHP método en los datos PUBLICADOS antes de usar json_decode()

es decir:

//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();

Espero que ayude