Formulir terkirim dan tidak berada di halaman yang sama karena atribut tindakan pada formulir, dan tombol kirim normal.
Yang mengarah ke .submit()
. Anda metode termasuk .preventDefault()
mungkin juga tidak diinterpretasikan setelah html dimuat.
Anda dapat melakukan sesuatu seperti ini:
<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>
Dan javascript bisa menjadi sesuatu di sepanjang baris:
( 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 )
);
Lihat jsfiddle untuk diri sendiri.
Anda dapat mengatakan itu berfungsi karena Anda mendapatkan kesalahan konsol bahwa tujuan permintaan tidak ditemukan - 404 - meskipun halaman tidak disegarkan, Anda tetap berada di tempat Anda berada...dengan halaman yang tepat untuk dikirim, itu berfungsi sepenuhnya.
EDIT
Saya mengubah pengaturan 'data' di ajax()
panggil sehingga bidang formulir ditetapkan sebagai string json ke variabel POST [toDB].
Jadi di PHP Anda, Anda akan melakukan:
$datas = json_decode( $_POST['toDB'], true );
Dan sekarang $datas
. Anda variabel adalah array asosiatif yang berisi semua nama dan nilai bidang formulir Anda. Saya tidak 100% pada pernyataan berikutnya, tetapi Anda mungkin perlu menggunakan stripslashes()
PHP metode pada data POSTED sebelum menggunakan json_decode()
yaitu:
//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();
Semoga membantu