申し込みフォームにajax + phpを使用しています。 JSサイドフロントエンドとPHPサイドバックエンドの2つのバリデーションがあります。 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');
}
のように見え、ここでは、あなたの$で
dataType: "json",
を追加する必要が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''ですか?また、いくつかの 'return true;'があるものの、何かを印刷するのではなくむしろそこを通って呼び出されるかのように見えます。 – jprofitt
'Firebugで分析されたページ:エラーメッセージの取得responseDataはnullです。 (responseData = jQuery.parseJSON(data)) '...これは、あなたが応答を得ていないわけではありません。 'データ'とは何ですか?それは空ですか? – Quentin
あなたのスクリプトの下に 'echo" test ";"を追加するだけで、あなたのスクリプトが何か応答しているかどうかを単純にチェックしようとしましたか? – sascha