Обработка Ajax Ответ - PullRequest
       1

Обработка Ajax Ответ

0 голосов
/ 09 марта 2020

Я создаю регистрационную форму пользователя для своего сайта и использую ajax для обработки процесса на стороне сервера. Моя проблема - обработка ответа от моего php кода. После выполнения на стороне сервера возможными ответами могут быть успех (зарегистрированный пользователь), ошибка подключения к базе данных, ошибка пустого поля (полей) или сбой при выполнении запроса sql (входные данные уже существуют в уникальном sql поле, например, имя пользователя, адрес электронной почты). Я хочу знать, как я могу получить правильный ответ для каждого из них, чтобы отобразить сообщение для пользователя. Что у меня есть:

JS

  $.ajax({
    type: "post",
    url: "userRegistration.php",
    data: {
      firstname: firstname,
      surname: surname,
      email: email,
      usernameSignup: username,
      passwordSignup: password,
      passwordConfirm: passwordConfirm
    },
    dataType: "json",
    success: function(data) {
      console.log(data.status);
      if (data.status == "success") {
        console.log("Registration was successful");
        //Do success stuff
      } else if (data.status == "error") {
        console.log("Didn't Execute Query");
        // Do error stuff
      } else if (data.status == "connectionError") {
        console.log("Failed to connect to database");
        // Do error stuff
      } else {
        console.log("Empty fields");
        // Do error stuff
    }
  });

PHP

<?php
// try catch statement to connect to database through getConnection() function in dbConn.php file
try {
    // try to connect to database
    require_once("dbConn.php");
    $dbConn = getConnection();
} catch (Exception $e) {
    // database connect error
    //echo "A problem occured: " . $e->getMessage();
    $response_array["status"] = "connectionError";
}

// Form validation for POST method to check fields are not empty
if (!empty($_POST['firstname'])) {
    $firstname = filter_has_var(INPUT_POST, 'firstname') ? $_POST['firstname'] : null;
    $firstname = trim($firstname);
} else {
    echo "A first name must be entered.<br/>";
}

// Same validation for other fields

// If all the previous steps are valid and variables are set, try to run the SQL query to make new account.
if (!empty($firstname) && !empty($surname) && !empty($email) && !empty($usernameSignup) && !empty($passwordHash)) {
    try {
        $sqlQuery = "INSERT INTO GH_users (firstname, surname, email, accountConfirmed, username, passwordHash)
        VALUES ('$firstname', '$surname', '$email', 0, '$usernameSignup', '$passwordHash')";
        $execute = $dbConn->exec($sqlQuery);
        $response_array["status"] = "success";
    } catch (PDOException $e) {
        // failure to execute error
        //echo $sqlQuery . "<br>" . $e->getMessage();
        $response_array["status"] = "error";
    }
} else {
    // empty field(s) error
    $response_array["status"] = "empty";
}

// send the response
header("Content-type: application/json");
echo json_encode($response_array);
exit;

Обработчик статуса успеха работает правильно, но я не могу получить обработчик состояния ошибки, когда пытаюсь передать данные в базу данных, когда она уже существует, или пустой обработчик состояния для пустых полей. Я также не знаю, как проверить обработчик состояния connectionError. Любые советы / предложения по обработке этих ответов будут оценены.

1 Ответ

1 голос
/ 09 марта 2020

При обнаружении ошибки необходимо пропустить весь остальной код до отправки ответа JSON. Например, если вы получите connectionError, вам не следует пытаться выполнить запрос; это приведет к ошибке и заменит $response_array['status'] = 'connectionError' на $response_array["status"] = "error", так что вы сообщите о неправильном типе ошибки.

Кроме того, ошибки проверки формы должны возвращаться в ответе JSON, а не - повторил напрямую.

Один из способов достижения sh - это вложить ваши try/catch утверждения.

<?php
// try catch statement to connect to database through getConnection() function in dbConn.php file
try {
    // try to connect to database
    require_once("dbConn.php");
    $dbConn = getConnection();

    // Form validation for POST method to check fields are not empty
    if (!empty($_POST['firstname'])) {
        $firstname = filter_has_var(INPUT_POST, 'firstname') ? $_POST['firstname'] : null;
        $firstname = trim($firstname);
    } else {
        $response_array["status"] = "validationError";
        $response_array["message"] = "A first name must be entered.";
    }

    // Same validation for other fields

    // If all the previous steps are valid and variables are set, try to run the SQL query to make new account.
    if (!empty($firstname) && !empty($surname) && !empty($email) && !empty($usernameSignup) && !empty($passwordHash)) {
        try {
            $sqlQuery = "INSERT INTO GH_users (firstname, surname, email, accountConfirmed, username, passwordHash)
        VALUES ('$firstname', '$surname', '$email', 0, '$usernameSignup', '$passwordHash')";
            $execute = $dbConn->exec($sqlQuery);
            $response_array["status"] = "success";
        } catch (PDOException $e) {
            // failure to execute error
            //echo $sqlQuery . "<br>" . $e->getMessage();
            $response_array["status"] = "error";
        }
    } else {
        // empty field(s) error
        $response_array["status"] = "empty";
    }

} catch (Exception $e) {
    // database connect error
    //echo "A problem occured: " . $e->getMessage();
    $response_array["status"] = "connectionError";
}

// send the response
header("Content-type: application/json");
echo json_encode($response_array);
exit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...