前端需在輸入框失去焦點或點擊按鈕時,以 AJAX 向後台驗證卡券代碼,並將結果即時顯示在提示區域。關鍵在於 正確序列化 POST 資料、指定 dataType: json、處理回應並更新 DOM。
<div class="contact-input">
<label>兌換碼</label><br>
<input type="text" name="codeno" id="codeno" />
<input type="button" id="btnVerify" value="驗證" />
<div id="checkResult"></div>
</div>
<script>
$(function() {
$("#btnVerify").click(function() {
var code = $("#codeno").val().trim();
if (!code) { $("#checkResult").text("請輸入兌換碼"); return; }
$.ajax({
url: "checkCard.php",
type: "POST",
data: { codeno: code }, // 物件格式,jQuery 自動序列化為 application/x-www-form-urlencoded
dataType: "json", // 預期回應 JSON,自動解析
success: function(resp) {
if (resp.success) {
$("#checkResult").html("<span style='color:green'>" + resp.msg + "</span>");
} else {
$("#checkResult").html("<span style='color:red'>" + resp.msg + "</span>");
}
},
error: function(xhr, status, err) {
$("#checkResult").text("請求失敗:" + err);
}
});
});
// 失去焦點自動驗證(可選)
$("#codeno").blur(function() {
if ($(this).val().trim()) $("#btnVerify").click();
});
});
</script>
<?php
header('Content-Type: application/json; charset=utf-8');
$code = isset($_POST['codeno']) ? trim($_POST['codeno']) : '';
if (!$code) {
echo json_encode(['success' => false, 'msg' => '參數缺失']);
exit;
}
// 模擬驗證邏輯
$valid = ($code === 'VALID123'); // 實際查資料庫
echo json_encode([
'success' => $valid,
'msg' => $valid ? '驗證通過,卡券有效' : '卡券代碼無效或已過期'
]);
?>
| 錯誤寫法 | 問題 | 修正 |
|---|---|---|
data: "codeno="+$("#codeno").val() | 手動拼字串,特殊字元未編碼 | data: { codeno: $("#codeno").val() } |
$.post("url?param=val", ...) | 查詢字串參數屬 GET,$_POST 取不到 | 將參數放在 data 物件中 |
$('check').innerHTML+=msg | 選取器缺 #,innerHTML 是 DOM 屬性非 jQuery 方法 | $("#check").html(msg) 或 .text(msg) |
| 未設定 dataType | 回應視為字串,需手動 JSON.parse | dataType: "json" |
{code: 200, data:..., msg:...} 格式。遵循標準 AJAX 參數傳遞與 JSON 回應格式,能快速構建穩定的無刷新驗證功能。