幫我們的粉絲專頁按個讚!
本篇文章交教您如何使用 jQuery Ajax 提交表單資料達到不刷新頁面的需求!
介紹
首先我們先來了解什麼是 Ajax,AJAX 即「Asynchronous JavaScript and XML」 (非同步的JavaScript與XML技術),指的是一套綜合了多項技術的瀏覽器端網頁開發技術。
傳統的 Web 應用允許用戶端填寫表單 (form),當送出表單時就向網頁伺服器傳送一個請求,伺服器接收並處理傳來的表單,然後送回一個新的網頁,但這個做法浪費了許多頻寬,因為在前後兩個頁面中的大部分HTML碼往往是相同的,由於每次應用的溝通都需要向伺服器傳送請求,應用的回應時間依賴於伺服器的回應時間,這導致了使用者介面的回應比本機應用慢得多。
與此不同,AJAX 應用可以僅向伺服器傳送並取回必須的資料,並在用戶端採用 JavaScript 處理來自伺服器的回應,因為在伺服器和瀏覽器之間交換的資料大量減少,伺服器回應更快了,同時很多的處理工作可以在發出請求的用戶端機器上完成,因此 Web 伺服器的負荷也減少了。
類似於 DHTML 或 LAMP,AJAX 不是指一種單一的技術,而是有機地利用了一系列相關的技術,雖然其名稱包含 XML,但實際上資料格式可以由 JSON 代替,進一步減少資料量,形成所謂的 AJAJ,而用戶端與伺服器也並不需要異步。
資料來源:https://zh.wikipedia.org/wiki/AJAX
教學
本篇教學使用 jQuery,記得要引入喔!
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
首先我們先建立一個表單,範例程式碼如下
<form id="demo">
暱稱:<input type="text" id="nickname">
性別:
<select id="gender">
<option value="">請選擇</option>
<option value="男">男</option>
<option value="女">女</option>
<option value="其他">其他</option>
</select>
<button type="button" id="submitExample">執行範例</button>
</form>
Ajax 傳送的資料是讀取表單欄位的 ID 取得使用者輸入的資料。
jQuery Ajax 範例程式碼如下
$(document).ready(function() {
$("#submitExample").click(function() { //ID 為 submitExample 的按鈕被點擊時
$.ajax({
type: "POST", //傳送方式
url: "service.php", //傳送目的地
dataType: "json", //資料格式
data: { //傳送資料
nickname: $("#nickname").val(), //表單欄位 ID nickname
gender: $("#gender").val() //表單欄位 ID gender
},
success: function(data) {
if (data.nickname) { //如果後端回傳 json 資料有 nickname
$("#demo")[0].reset(); //重設 ID 為 demo 的 form (表單)
$("#result").html('<font color="#007500">您的暱稱為「<font color="#0000ff">' + data.nickname + '</font>」,性別為「<font color="#0000ff">' + data.gender + '</font>」!</font>');
} else { //否則讀取後端回傳 json 資料 errorMsg 顯示錯誤訊息
$("#demo")[0].reset(); //重設 ID 為 demo 的 form (表單)
$("#result").html('<font color="#ff0000">' + data.errorMsg + '</font>');
}
},
error: function(jqXHR) {
$("#demo")[0].reset(); //重設 ID 為 demo 的 form (表單)
$("#result").html('<font color="#ff0000">發生錯誤:' + jqXHR.status + '</font>');
}
})
})
});
上方範例程式碼使用 jQuery 編寫,如果不想使用 jQuery 也可以改寫成 JavaScript!
上方範例程式都有註解,我就不多解釋了。
接下來為後端 PHP 範例程式碼
header('Content-Type: application/json; charset=UTF-8'); //設定資料類型為 json,編碼 utf-8
if ($_SERVER['REQUEST_METHOD'] == "POST") { //如果是 POST 請求
@$nickname = $_POST["nickname"]; //取得 nickname POST 值
@$gender = $_POST["gender"]; //取得 gender POST 值
if ($nickname != null && $gender != null) { //如果 nickname 和 gender 都有填寫
//回傳 nickname 和 gender json 資料
echo json_encode(array(
'nickname' => $nickname,
'gender' => $gender
));
} else {
//回傳 errorMsg json 資料
echo json_encode(array(
'errorMsg' => '資料未輸入完全!'
));
}
} else {
//回傳 errorMsg json 資料
echo json_encode(array(
'errorMsg' => '請求無效,只允許 POST 方式訪問!'
));
}
首先我們要將資料類型設定為 json,這是跟 JavaScript 溝通的方式,使用 header('Content-Type: application/json; charset=UTF-8');。
然後判斷請求是否為 POST,使用 if ($_SERVER['REQUEST_METHOD'] == "POST")。
接下來就可以寫入驗證資料的方式了,本篇教學只簡單判斷資料是否輸入完全。
完整的範例程式碼如下
index.php
<!--
旋風之音 GoneTone
https://blog.reh.tw/
範例教學
jQuery Ajax 實現不刷新頁面提交資料 (後端使用 PHP 處理回傳 json)
-->
<!DOCTYPE html>
<html>
<head>
<title>jQuery Ajax 實現不刷新頁面提交資料 Demo (後端使用 PHP 處理回傳 json)</title>
</head>
<body>
<h1>jQuery Ajax 實現不刷新頁面提交資料 Demo (後端使用 PHP 處理回傳 json)</h1>
<h2>教學文章:<a href="https://blog.reh.tw/archives/662" target="_blank">https://blog.reh.tw/archives/662</a></h2>
<hr><br>
<form id="demo">
暱稱:<input type="text" id="nickname">
性別:
<select id="gender">
<option value="">請選擇</option>
<option value="男">男</option>
<option value="女">女</option>
<option value="其他">其他</option>
</select>
<button type="button" id="submitExample">執行範例</button>
</form>
<br><hr>
<p id="result"></p> <!-- 顯示回傳資料 -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <!-- 引入 jQuery -->
<script type="text/javascript">
$(document).ready(function() {
$("#submitExample").click(function() { //ID 為 submitExample 的按鈕被點擊時
$.ajax({
type: "POST", //傳送方式
url: "service.php", //傳送目的地
dataType: "json", //資料格式
data: { //傳送資料
nickname: $("#nickname").val(), //表單欄位 ID nickname
gender: $("#gender").val() //表單欄位 ID gender
},
success: function(data) {
if (data.nickname) { //如果後端回傳 json 資料有 nickname
$("#demo")[0].reset(); //重設 ID 為 demo 的 form (表單)
$("#result").html('<font color="#007500">您的暱稱為「<font color="#0000ff">' + data.nickname + '</font>」,性別為「<font color="#0000ff">' + data.gender + '</font>」!</font>');
} else { //否則讀取後端回傳 json 資料 errorMsg 顯示錯誤訊息
$("#demo")[0].reset(); //重設 ID 為 demo 的 form (表單)
$("#result").html('<font color="#ff0000">' + data.errorMsg + '</font>');
}
},
error: function(jqXHR) {
$("#demo")[0].reset(); //重設 ID 為 demo 的 form (表單)
$("#result").html('<font color="#ff0000">發生錯誤:' + jqXHR.status + '</font>');
}
})
})
});
</script>
</body>
</html>
service.php
<?php
/*
* 旋風之音 GoneTone
* https://blog.reh.tw/
*
* 範例教學
* https://blog.reh.tw/archives/662/
*/
header('Content-Type: application/json; charset=UTF-8'); //設定資料類型為 json,編碼 utf-8
if ($_SERVER['REQUEST_METHOD'] == "POST") { //如果是 POST 請求
@$nickname = $_POST["nickname"]; //取得 nickname POST 值
@$gender = $_POST["gender"]; //取得 gender POST 值
if ($nickname != null && $gender != null) { //如果 nickname 和 gender 都有填寫
//回傳 nickname 和 gender json 資料
echo json_encode(array(
'nickname' => $nickname,
'gender' => $gender
));
} else {
//回傳 errorMsg json 資料
echo json_encode(array(
'errorMsg' => '資料未輸入完全!'
));
}
} else {
//回傳 errorMsg json 資料
echo json_encode(array(
'errorMsg' => '請求無效,只允許 POST 方式訪問!'
));
}
?>
張文相 Wenxiang Zhang
我是本站的站長,是一位 Web 工程師,喜歡 Coding XDD
本站內容未經授權許可請勿擅自抄襲
如果需引用部分內容請註明來源網址
發表時間:2018/06/18 22:45:25
修改時間:2019/03/13 16:37:44

