在我的註冊表單中使用ajax + php。有2個驗證:JS端前端和PHP端後端。在PHP端創建了一個名爲response
的特殊函數:它將PHP端錯誤作爲JSON數據發送。Ajax沒有得到來自PHP端的響應
問題是我無法從PHP方面得到任何迴應。
在firebug中分析過的頁面:收到錯誤消息responseData is null
。 (responseData = jQuery.parseJSON(data)
)
JS部分看起來像
//check the form is not currently submitting
if ($(this).data('formstatus') !== 'submitting') {
var form = $(this),
formData = form.serialize() + '&formID=' + form.attr('id'),
formUrl = form.attr('action'),
formMethod = form.attr('method');
//add status data to form
form.data('formstatus', 'submitting');
if (validate()) {
//send data to server for validation
$.ajax({
url: formUrl,
type: formMethod,
data: formData,
success: function (data) {
//setup variables
var responseData = jQuery.parseJSON(data),
cl, text;
//response conditional
switch (responseData.status) {
case 'error':
cl = 'error';
text = responseData.message;
break;
case 'success':
cl = 'success';
text = 'Qeydiyyat uğurla başa çatdı';
break;
}
$.notifyBar({
cls: cl,
html: text
});
}
});
}
form.data('formstatus', 'idle');
}
這裏是PHP部分
<?php
require '../common.php';
function checkIfEmailExists($email, $stmt)
{
if ($stmt = $db->prepare("SELECT id FROM TABLE WHERE email=? LIMIT 1")) {
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->bind_result($count);
$stmt->close();
}
return ($count > 0 ? true : false);
}
if ($_POST['formID'] == 'signup_form') {
// Setting vars
$lname = $_POST['lname'];
$fname = $_POST['fname'];
$mname = $_POST['mname'];
$email = $_POST['email'];
$pass = $_POST['pass'];
$confirm_pass = $_POST['confirm_pass'];
//=====================
//Server side validation >>
//First name, middle name, last name check >>
if (!$lname) {
response('error', 'Familiyanı daxil edin');
}
if (!$fname) {
response('error', 'Adı daxil edin');
}
if (!$mname) {
response('error', 'Atanızın adını daxil edin');
}
//<<
//Pass check >>
if (strlen($pass) > 2) {
if ($pass == $confirm_pass) {
return true;
} else {
response('error', 'Şifrənin təkrarlanmasında səhv');
}
} else {
response('error', 'Şifrədə simvolların sayı 4-dən çox olmalıdır');
}
//<<
//email validation >>
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
if (!checkIfEmailExists($email, $stmt)) {
return true;
} else {
response('error', 'Bu ünvanla qeydiyyata alınmış başqa istifadəçi var.');
}
} else {
response('error', 'Email ünvanını düzgün daxil edin');
}
//<<
// Create statement object
$stmt = $db->stmt_init();
// Create a prepared statement
if ($stmt->prepare("INSERT INTO `users` (`fname`, `mname`, `lname`, `email`, `pass`, `reg_dt`) VALUES (?, ?, ?, ?, ?, NOW())")) {
// Binding vars
$rc = $stmt->bind_param('sssss', $fname, $lname, $mname, $email, $pass) or die('bind_param() failed: ' . htmlspecialchars($stmt->error));
// Execute query
$rc = $stmt->execute();
if ($rc) {
response('success', 'Qeydiyyat uğurla başa çatdı');
} else {
response('error', htmlspecialchars($stmt->error));
}
// Close statement object
$stmt->close();
} else {
response('error', htmlspecialchars($dv->error));
}
}
else {response('error', 'Qeydiyyatda problem');}
//return json response
function response($status, $message)
{
$data = array(
'status' => $status,
'message' => $message
);
echo json_encode($data);
die();
}
?>
你確定'$ _POST ['formID'] =='signup_form''?它也看起來像你有一些'返回真實的;'電話通過那裏傳播,而不是打印或繼續。 – jprofitt
'在firebug中分析的頁面:獲取錯誤消息responseData爲空。 (responseData = jQuery.parseJSON(data))'......這並不意味着你沒有得到迴應。什麼是'數據'?它是空的嗎? – Quentin
試圖簡單地檢查你的腳本是否通過在你的include下添加'echo「test」;'來響應任何內容? – sascha