Ajax не получает ответа со стороны PHP

#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); попробуйте это в своем скрипте