sql >> データベース >  >> RDS >> Mysql

ajaxフォームを送信し、同じページにとどまり、機能しない

    フォームは送信されますが、フォームのアクション属性と通常の送信ボタンがあるため、同じページに留まりません。

    これはあなたの.submit()につながります .preventDefault()を含むメソッド HTMLがロードされた後もおそらく解釈されません。

    あなたはこれに沿って何かをすることができます:

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

    そして、javascriptは次のようなものである可能性があります:

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

    jsfiddleで試してみてください を参照してください。 自分のために。

    リクエストの宛先が見つからないというコンソールエラーが発生するため、機能していることがわかります-404-ページは更新されませんが、現在の場所にとどまります...送信する適切なページが完全に機能します。

    編集

    ajax()の「data」の設定を変更しました フォームフィールドがjson文字列としてPOST変数[toDB]に設定されるように呼び出します。

    したがって、PHPでは次のようにします。

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

    そして今、あなたの$datas 変数は、すべてのフォームフィールドの名前と値を含む連想配列です。私はこの次のステートメントに100%参加しているわけではありませんが、PHPのstripslashes()を使用する必要があるかもしれません。 json_decode()を使用する前のPOSTEDデータのメソッド

    つまり:

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

    お役に立てば幸いです



    1. フォローするトップデータベースブログ

    2. SQLServerで日付と時刻をフォーマットする方法

    3. 検索クエリでハイフンを使用した全文検索を許可する方法

    4. Round()の2番目の引数を列で機能させるにはどうすればよいですか?