Почему содержимое массива из php не вводится в массив в js?

#javascript #php #ajax

Вопрос:

У меня есть небольшая проблема, дело в том, что мой массив не получает содержимого.

 $staff = array(
"permissions" => false,
"staff" => true,
"group" => 3
);
echo json_encode($staff);
 
 let staff = [];

$.ajax({
    type: "POST",
    url: "../includes/signin.inc.php",
})
.done(function (data) {
    staff = JSON.parse(data);
    console.log(staff);
})
.fail(function (xhr, status, error) {
  alert(status);
});
 

И у меня есть эта ошибка:
Unexpected end of JSON input

Просто я хочу, чтобы массив $штатное место в штате в js.

Комментарии:

1. Это определение и кодировка $staff в скрипте, который правильно выводит HTTP, или он просто делает это echo ?

2. Поместите header('Content-Type: application/json'); в начало PHP-скрипта.

3. Что вы пытались сделать, чтобы решить эту проблему? Где ты застрял? Помогает ли вам сетевая консоль вашего браузера определить, является ли это проблемой PHP или проблемой JS? Как правило, это не то и другое

Ответ №1:

Вы должны использовать

 header('Content-Type: application/json');
 

перед отправкой вашего JSON с сервера на клиент. Тогда ошибка исчезнет.

Ответ №2:

Я изменил файл,

     $stmt = $pdo->prepare("SELECT * FROM accounts WHERE username = ? OR email = ?");
    $stmt->execute([$_POST['username'], $_POST['username']]);
    $row = $stmt->fetch();

    if ($row amp;amp; password_verify($_POST['pwd'], $row['password'])) {
        session_start();
        $_SESSION['id'] = $row['id'];
        $_SESSION['user'] = $row['username'];
        $group = $row['permissions'];
        include 'group.inc.php';
        header("Location: ../home/");
    } else {
        echo "invalid";
    }
}
 

И group.inc.php:

 <?php
header('Content-Type: application/json');

switch ($group) {
    case '0':
        break;
    case '1':
        $_SESSION['permissions'] = false;
        echo json_encode($_SESSION['staff'] = true);
        $_SESSION['group'] = 1;
        break;
    case '2':
        $_SESSION['permissions'] = false;
        echo json_encode($_SESSION['staff'] = true);
        $_SESSION['group'] = 2;
        break;
    case '3':
        $staff = array(
            "permissions" => false,
            "staff" => true,
            "group" => 3
        );
        echo json_encode($staff);
        break;
}
 

В js я изменил только путь. Конечно, моя новая ошибка: SyntaxError: Unexpected token < in JSON at position 0

Ответ №3:

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

Теперь это работает, код:

 $_SESSION['group'] = $row['permissions'];
    include 'group.inc.php';
 
 header('Content-Type: application/json');

session_start();

$group = $_SESSION['group'];

switch ($group) {
    case '0':
        break;
    case '1':
        $_SESSION['permissions'] = false;
        echo json_encode($_SESSION['staff'] = true);
        $_SESSION['group'] = 1;
        break;
    case '2':
        $_SESSION['permissions'] = false;
        echo json_encode($_SESSION['staff'] = true);
        $_SESSION['group'] = 2;
        break;
    case '3':
        $staff = array(
            "permissions" => false,
            "staff" => true,
            "group" => 3
        );
        echo json_encode($staff);
        break;
}
 
   console.log(data.group);
  console.log(data.staff);
  console.log(data.permissions);
 

Результат:

 {permissions: false, staff: true, group: 3}
group: 3
permissions: false
staff