Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Prześlij formularz ajax i pozostań na tej samej stronie nie działa

Formularz zostaje przesłany i nie pozostaje na tej samej stronie z powodu atrybutu działania w formularzu i normalnego przycisku przesyłania.

Co prowadzi do Twojego .submit() metoda zawierająca .preventDefault() prawdopodobnie nie jest również interpretowany po załadowaniu html.

Możesz zrobić coś podobnego do tego:

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

A javascript może być podobny do:

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

Zobacz jsfiddle dla siebie.

Możesz powiedzieć, że działa, ponieważ pojawia się błąd konsoli, że miejsce docelowe żądania nie zostało znalezione - 404 - chociaż strona nie odświeża się, pozostajesz tam, gdzie jesteś ... z odpowiednią stroną do przesłania do niej działa w pełni.

EDYTUJ

Zmodyfikowałem ustawienie 'data' w ajax() wywołaj, aby pola formularza były ustawione jako ciąg json na zmienną POST [toDB].

Więc w swoim PHP zrobiłbyś:

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

A teraz Twoje $datas zmienna jest tablicą asocjacyjną zawierającą wszystkie nazwy i wartości pól formularza. Nie jestem w 100% w tej następnej instrukcji, ale być może będziesz musiał użyć stripslashes() PHP metoda na POSTED danych przed użyciem json_decode()

czyli:

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

Mam nadzieję, że to pomoże



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. doktryna:schema:aktualizacja nie uwzględnia kolejności kolumn

  2. Błąd MYSQLi:użytkownik ma już więcej niż „max_user_connections” aktywnych połączeń

  3. Jak utworzyć wyzwalacze, aby dodać zdarzenia zmiany do tabel dziennika audytu?

  4. Różnica między strefami czasowymi America/Los_Angeles, US/Pacific i PST8PDT?

  5. Suma na lewym sprzężeniu SQL