Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Senden Sie das Ajax-Formular und bleiben Sie auf derselben Seite, die nicht funktioniert

Das Formular wird gesendet und bleibt aufgrund des Aktionsattributs auf dem Formular und der normalen Senden-Schaltfläche nicht auf derselben Seite.

Was zu Ihrem .submit() führt Methode einschließlich .preventDefault() wahrscheinlich auch nicht interpretiert, nachdem der HTML-Code geladen wurde.

Sie könnten so etwas tun:

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

Und das Javascript könnte etwas in der Art von:

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

Siehe jsfiddle für sich selbst.

Sie können feststellen, dass es funktioniert, weil Sie einen Konsolenfehler erhalten, dass das Anforderungsziel nicht gefunden wurde - 404 - obwohl die Seite nicht aktualisiert wird, bleiben Sie genau dort, wo Sie sind ... mit einer richtigen Seite zum Senden funktioniert es vollständig.

BEARBEITEN

Ich habe die Einstellung von 'data' im ajax() geändert aufrufen, sodass die Formularfelder als JSON-String auf eine POST-Variable gesetzt werden [toDB].

In Ihrem PHP würden Sie also Folgendes tun:

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

Und jetzt Ihre $datas Variable ist ein assoziatives Array, das alle Namen und Werte Ihrer Formularfelder enthält. Ich bin bei dieser nächsten Aussage nicht 100%ig, aber Sie müssen vielleicht PHPs stripslashes() verwenden -Methode für die POSTED-Daten vor der Verwendung von json_decode()

d.h.:

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

Hoffe das hilft