私は自分のアプリ開発クラスのWebサイトで作業していますが、最も奇妙な問題があります。
少しのJQueryを使用して、フォームデータを「process.php」というphpページに送信してから、DBにアップロードします。奇妙なバグは、フォームの送信時にページがリロードされることであり、JQueryをバックグラウンドで実行する方法がわからないか、私の人生がわかりません。それが、そもそもJQueryを使用するという点です。とにかく、関連するすべてのコードを送信します。他に何か必要な場合はお知らせください。
<script type="text/JavaScript">
$(document).ready(function () {
$('#button').click(function () {
var name = $("#name").val();
var email = $("#email").val();
$.post("process.php", {
name: name,
email: email
}).complete(function() {
console.log("Success");
});
});
});
</script>
<div class= "main col-xs-9 well">
<h2 style="color: black" class="featurette-heading">Join our mailing list!</h2>
<form id="main" method = "post" class="form-inline">
<label for="inlineFormInput">Name</label>
<input type="text" id="name" class="form-control mb-2 mr-sm-2 mb-sm-0" id="inlineFormInput" placeholder="Jane Doe">
<label for="inlineFormInputGroup">Email</label>
<div class="input-group mb-2 mr-sm-2 mb-sm-0">
<input type="text" id="email" class="form-control" id="inlineFormInputGroup" placeholder="[email protected]">
</div>
<!--Plan to write success message here -->
<label id="success_message"style="color: darkred"></label>
<button id ="button" type="submit" value="send" class="btn btn-primary">Submit</button>
</form>
関連する場合、これは私のphpです。
<?php
include 'connection.php';
$Name = $_POST['name'];
$Email = $_POST['email'];
//Send Scores from Player 1 to Database
$save1 = "INSERT INTO `contact_list` (`name`, `email`) VALUES ('$Name', '$Email')";
$success = $mysqli->query($save1);
if (!$success) {
die("Couldn't enter data: ".$mysqli->error);
echo "unsuccessfully";
}
echo "successfully";
?>
これはログのスクリーンショットです:
<button>
要素をフォームに配置すると、特に指定がない限り、フォームが自動的に送信されます。次の2つの戦略を使用できます。
<button type="button">
を使用して、デフォルトの送信動作をオーバーライドしますevent.preventDefault()
を使用して、フォームの送信を防止します追加のtype
属性をボタンマークアップに挿入します。
<button id="button" type="button" value="send" class="btn btn-primary">Submit</button>
ボタンがクリックされたときにデフォルトのフォーム送信を禁止します。これは理想的なソリューションではないことに注意してください。実際には、ボタンクリックイベントではなく、送信イベントをリッスンする必要があるためです。
$(document).ready(function () {
// Listen to click event on the submit button
$('#button').click(function (e) {
e.preventDefault();
var name = $("#name").val();
var email = $("#email").val();
$.post("process.php", {
name: name,
email: email
}).complete(function() {
console.log("Success");
});
});
});
この改善では、<form>
要素から発行された送信イベントをリッスンします。
$(document).ready(function () {
// Listen to submit event on the <form> itself!
$('#main').submit(function (e) {
e.preventDefault();
var name = $("#name").val();
var email = $("#email").val();
$.post("process.php", {
name: name,
email: email
}).complete(function() {
console.log("Success");
});
});
});
.serialize()
を使用してフォームをシリアル化しますが、入力にname
属性を追加することを忘れないでください:jQueryのドキュメント に従って、name
属性は.serialize()
が機能するために必要です。
フォーム要素の値をシリアル化された文字列に含めるには、要素に名前属性が必要です。
<input type="text" id="name" name="name" class="form-control mb-2 mr-sm-2 mb-sm-0" id="inlineFormInput" placeholder="Jane Doe">
<input type="text" id="email" name="email" class="form-control" id="inlineFormInputGroup" placeholder="[email protected]">
そして、あなたのJSで:
$(document).ready(function () {
// Listen to submit event on the <form> itself!
$('#main').submit(function (e) {
// Prevent form submission which refreshes page
e.preventDefault();
// Serialize data
var formData = $(this).serialize();
// Make AJAX request
$.post("process.php", formData).complete(function() {
console.log("Success");
});
});
});