невозможно получить данные внутреннего массива с помощью JSON-encode

#javascript #php #json #backend #jsonencoder

#javascript #php #json #серверная часть #jsonencoder

Вопрос:

у меня есть скрипт (Users.php ), который использует JSON_encode для отображения массива объектов в HTML-таблице.

как в:

Users.php :

html // пустая таблица

скрипт // заполняет таблицу с помощью json encode для получения php-массива и отображения содержимого в таблице

myPhp.php :

получает информацию из базы данных и создает массив.

мой php-файл работает нормально, как и мой скрипт. единственная проблема заключается в том, что когда я использую JSON_encode для получения массива из php в скрипт, он показывает ошибку: Uncaught SyntaxError: неожиданный токен ‘<‘ // в строке 1 php-кода

мой Users.php:

  <body >
    <!-- adding user -->
    <form  class ="formArea" id = "addUser" action = "addUsers.php" method="POST">
      <!-- addUsers.php will add users to the database then display Users.php again -->
    </form>
    <!-- display users -->
        <table id="usersTable">
            <!-- table to display user info -->
        </table>
    </div>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <!--jquery-->
    <script>

        //display all users in table
        var users = <?php echo JSON_encode($rows); ?>
        
        displayUsers(users);
        function displayUsers(users){
            for(i = 0; i<users.length; i  )
            {
               //create table row
               //add user information to the row
            }
        }     
    </script>
    
</body>
 

мой myPhp.php:

     <?php
// fur UI Users.php
// calls all users from the db and displays them in users table
$sql = new mysqli("localhost","root","","atds");

// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
  exit();
 }
 
 $query = "SELECT * FROM users";
 $result = $sql->query($query);           
 while($row = $result->fetch_object())
 {
     $rows[]=$row;
 }

 // Close connection
 $result->close();
 $sql->close();

?>
 

что я пробовал:

Я попытался включить файл php перед использованием json_encode

 <?php include'myPhp.php' ?>
var users = <?php echo json_encode($rows); ?> 
 

это работает, когда я запускаю Users.php но если я добавлю пользователя (отправив форму на этой веб-странице), файл add user будет читать Users.php опять же, после добавления пользователя пользователи в конечном итоге не будут отображаться, и у меня будет та же ошибка:
Неперехваченная синтаксическая ошибка: неожиданный токен ‘<‘
// в строке 1 из myPhp.php

есть ли какой-либо другой способ использовать JSON_encode, который не приведет к этой ошибке?

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

1. Игнорируйте комментарий выше, я думаю, вам нужно проанализировать ваши данные json, используя JSON.parse(users) because json_encode возвращает строку, а не фактический объект json.

2. я попытался добавить JSON_ parse(users) после users= JSON_encode(). я все равно получил ту же ошибку. Я не понимаю, возвращает ли encode строку, тогда как мой Users.php работайте, когда я включаю myPhp.php

Ответ №1:

Я не получаю ту же ошибку, что и вы, но MyUsers.php не знает о переменной, которую вы пытаетесь использовать:

 

    //display all users
    //users array contains names and roles
    var users = <br />
<b>Warning</b>:  Undefined variable $rows in <b>/var/www/html/public/temp/myUsers.php</b> on line <b>17</b><br />
null
        displayUsers(users);
    function displayUsers(users){
        for(i = 0; i<users.length; i  )
        {
            //create table row
            //add user information to the row
        }
    }

 

Есть несколько разных способов получить $rows в myUsers.php .

Один из способов, который легче понять, когда вы учитесь, — это сделать все на одной странице: получить ваши данные вверху и отобразить HTML внизу.

MyUser2.php : Я не настраивал базу данных и не жестко кодировал строки. Предполагая, что ваша настройка базы данных работает, вы можете удалить комментарии и жестко запрограммированных пользователей. Обратите внимание, что, поскольку вы выводите действительный массив JSON, вам не нужно повторно анализировать его внутри javascript.

В браузере это будет выглядеть так:

 
    //display all users
    //users array contains names and roles
    var users = ["user1","user2","user3"];

        displayUsers(users);
    function displayUsers(users){
        for(i = 0; i<users.length; i  )
        {
            //create table row
            //add user information to the row
            document.write(users[i]   '<br>');
        }
    }

 

MyUser2.php список файлов:

 <?php
/*
// fur UI Users.php
// calls all users from the db and displays them in users table
$sql = new mysqli("localhost","root","","atds");

// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
    exit();
}

$query = "SELECT * FROM users";
$result = $sql->query($query);
while($row = $result->fetch_object())
{
    $rows[]=$row;
}

// Close connection
$result->close();
$sql->close();
*/
$rows[] = 'user1';
$rows[] = 'user2';
$rows[] = 'user3';

?>
<body >
<!-- adding user -->
<form  class ="formArea" id = "addUser" action = "addUsers.php" method="POST">
    <!-- addUsers.php will add users to the database then display Users.php again -->
</form>
<!-- display users -->
<table id="usersTable">
    <!-- table to display user info -->
</table>
</div>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <!--jquery-->
<script>

    //display all users
    //users array contains names and roles
    var users = <?php echo JSON_encode($rows); ?>;

        displayUsers(users);
    function displayUsers(users){
        for(i = 0; i<users.length; i  )
        {
            //create table row
            //add user information to the row
            document.write(users[i]   '<br>');
        }
    }
</script>

</body>

 

Это поможет вам начать. Хорошей основой для изучения PHP является CodeIgniter. Laravel — отличный фреймворк и более популярный, но он добавляет много волшебных вещей, которые затрудняют изучение обычного PHP.

Ответ №2:

В вашем «Users.php »

сначала вы должны включить «myPhp.php »

    <?php include'myPhp.php' ?>
 

и используйте это так:

 var json = '<?php echo JSON_encode($rows); ?>';
var users = JSON.parse(json);
 

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

1. Это то же самое, что и ранее удаленный ответ. Если вызов global $row; этого даже не сработает.

2. Я попробовал это самостоятельно. Для меня это работает так. Я использовал множественную переменную $rows. (Мой удаленный ответ ранее был вопросом, по ошибке для получения более подробной информации, и я изменил его на ответ)

Ответ №3:

решаемая. при запуске таблица отображалась правильно Users.php но показывает эту ошибку при добавлении пользователя путем выполнения AddUsers.php который содержит readfile(‘Users.php ‘) в конце этого. проблема была readfile(Users.php) на самом деле в addUsers.php .

readfile не выполняется Users.php но в нем отображаются только элементы. поэтому JSON_encode никогда не выполнялся, и пользователи не были известны Users.php .

я решил эту проблему, изменив readfile('Users.php') в AddUsers на include 'Users.php';

Users.php код стал :

 <?php include 'displayUsers.php'; ?>;
        var users = <?php echo JSON_encode($rows); ?>;
        
        displayUsers(users);
        function displayUsers(users){...}