Не работaет запрос AJAX и JSON

432
02 июля 2017, 16:05

Проблема с AJAX

Когда я убираю dataType: 'json', то success: работает, а иначе нет. Так как $("#log-form").serialize() тоже работает, но в самом файле login.php ничего не происходит.

Как мне возвратить json-строку. Я планировал сделать так: если значение этой json-строки равно "false-pass", то сделать определенный кусок js-кода

В общем, две проблемы: как сделать json-запрос? (я слышал что-то о $.getJson); и почему не отправляются данные в файл login.php?

         $('#log-form').submit(function(e) {
                e.preventDefault();
                $.ajax({
                    url: 'login.php',
                    type: 'POST',
                    dataType: 'json',
                    data: $("#log-form").serialize(),
                    success: function(){
                        console.log($("#log-form").serialize());
                    }
                })
                .done(function() {
                    console.log("success");
                });
            });

login.php:

<? 
session_start();
if ($_SESSION['logged-in']) {
    echo 'Доступ заборонено!';
    exit;
}
else {
    require_once 'database.php'; 
    $connect = mysqli_connect($host, $user, $pass, $db);

    if (isset($_POST['log-submit-n']) && !$_SESSION['logged-in']) {
        $login = $_POST['log-login-n'];
        $pass = $_POST['log-pass-n'];
        $sql = "SELECT * FROM `users` WHERE `login` = '$login'";
        $res = mysqli_query($connect, $sql);
        $row = mysqli_fetch_array($res);
        $row_count = mysqli_num_rows($res);
        $id = $row['id'];
        if ($row_count == 1) {
            $db_pass = $row['password'];
            $db_login = $row['login'];
            if ($login == $db_login && $pass == $db_pass) {
                $_SESSION['logged-in'] = true;
                $_SESSION['login'] = $login;
                $_SESSION['id'] = $id;
            } 
            else if ($login == $db_login && $pass!=$db_pass) {
                $error = "false-pass";
                json_encode($error);
            }
        }
        else {
            $error = "none-acc";
            json_encode($error);
        }
    } 
    mysqli_close($connect);
}
?>
Answer 1

Так как Вы посылаете содержимое формы вручную (ajax-ом), то value кнопки с name="log-submit-n" в посылаемые данные не включается. Ваш серверный скрипт обернут в условие, проверяющее наличие в запросе $_POST['log-submit-n']. Этого ключа в запросе нет - ответ пустой, потому что Вы ничего в ответ не пишите.

Спрашивающему на заметку:

Удачно, что у меня сегодня хорошо работают телепатические способности. В такие вопросы следует включать html.

Update

В случае неудачной авторизации:

echo json_encode(array('result' => 'error', 'message' => 'explain what was wrong', data => NULL));

В случае удачной авторизации:

echo json_encode(array('result' => 'success', 'message' => 'All is good.', data => your_data));

В js:

success: function(data) {
  console.log(data);
  if (data.result != "success") {
    // show error information to the user
    alert(data.message);
  }
}
READ ALSO
Работа с PHP JSON MYSQL

Работа с PHP JSON MYSQL

Есть таблица

222
Как на PHP сделать замену текста?

Как на PHP сделать замену текста?

Как на PHP сделать замену текста **bold** на <b>bold</b>, __underline__ на <u>underline</u> и --str-- на <strike>str</strike>

257
вопрос про opcache (php)

вопрос про opcache (php)

здравствуйте, есть ли смысл использовать opcache для php, если при этом в конфиге не указывать полное кэширование php файлов?

201
вопрос про php display error

вопрос про php display error

здравствуйте, есть сайт, и поддомен, поддомен используется для тестирования обновлений, которые затем дописываются в каталог основного сайта

212