#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)
becausejson_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){...}