#php #javascript #ajax #json #jquery
#php #javascript #ajax #json #jquery
Вопрос:
Используя ajax php в моей форме регистрации. Существует 2 проверки: интерфейс на стороне JS и серверная часть на стороне PHP. Создана специальная функция, вызываемая response
на стороне PHP: она отправляет ошибку на стороне PHP в виде данных JSON.
Проблема в том, что я не могу получить никакого ответа со стороны 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() 'amp;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();
}
?>
Комментарии:
1. Ты уверен
$_POST['formID'] == 'signup_form'
? Также похоже, что у вас есть несколькоreturn true;
звонков, распространяющихся там, вместо того, чтобы что-то печатать или просто продолжать.2.
Analyzed page in firebug: getting error message responseData is null. (responseData = jQuery.parseJSON(data))
… Это не значит, что вы не получаете ответа. Что такоеdata
? Он пустой?3. Пытался просто проверить, отвечает ли ваш скрипт на что-либо, добавив
echo "test";
ниже вашего include, например?4. Является ли $ _POST[‘FormID’] == ‘signup_form’?
5. @Quentin данные — это ответ от PHP
Ответ №1:
Вам нужно добавить
dataType: "json",
В вашем методе $.Ajax.
Комментарии:
1. Попробуйте alert (данные); в функцию success. Что это дает?
2. попробуйте выполнить некоторую отладку. Попробуйте вывести что-нибудь из вашего php-скрипта, чтобы убедиться, что проблема не в javascript. если javascript получает отладочный ответ, это ошибка, связанная с php, где-то в вашем скрипте
3. Я не голосовал за понижение 🙂 @OptimusCrime у меня есть оба оператора if else, он в любом случае должен что-то отвечать
4. @OptimusCrime также я попытался удалить функцию отправки и отправлять данные непосредственно в php. Это дало мне сообщение. PHP-сторона работает
5. какой результат вы получите, если просто сбросите свой $ _POST в php-файл? Отправляются ли post-переменные с ajax?
echo json_encode($_POST);
попробуйте это в своем скрипте