Я ищу лучший способ передать php-массив в javascript.
Я делаю RPG, и когда они заходят в систему, я хотел бы вернуть их сохраненные данные из базы данных и сохранить в массиве со стороны JavaScript:
Чтобы получить данные, я делаю:
$.getJSON("php/CRUD.php", {"_functionToRun" : ""}, function (returned_data) { game.data.dataArray.push(returned_data.split(" ")); log("1: " + game.data.dataArray); //output: `1: 120,mymap2` log("2: " + game.data.dataArray[0]); //output: `2: 120,mymap2` } );
PHP:
$qry = 'SELECT * FROM userstats WHERE id_user_fk ="' . $_SESSION['userid'] . '" LIMIT 1'; $result = $mysqli->query($qry) or die(mysqli_error($mysqli)); while ($row = $result->fetch_assoc()) { $message = $row['experience'] . $row['levelname']; } echo json_encode($message);
1) Это лучший способ получить набор значений в массив js?
2) Почему я не могу получить доступ к определенному элементу данных game.data.dataArray
используя game.data.dataArray[0]
.
Они дают одинаковый выход 1: 120,mymap2
log("1: " + game.data.dataArray); log("2: " + game.data.dataArray[0]);
Должен ли returned_data.split(" ")
разделять возвращенную строку на два элемента массива?
EDIT: Хорошо, я сделал echo json_encode($message);
и он возвращается с кавычками, но при этом возвращает одинаковые результаты для game.data.dataArray
и game.data.dataArray[0]
1: "120,mymap2" 2: "120,mymap2"
Я также изменил функцию на $.getJSON
Изменен снова на
$qry = 'SELECT * FROM userstats WHERE id_user_fk ="' . $_SESSION['userid'] . '"'; $result = $mysqli->query($qry) or die(mysqli_error($mysqli)); while ($row = $result->fetch_assoc()) { $array[] = $row['experience'] . $row['levelname']; die(json_encode($array[])); }
и JS:
$.getJSON("php/CRUD.php", {"_functionToRun" : ""}, function (returned_data) { game.data.dataArray.push(returned_data.split(" ")); log("1: " + game.data.dataArray); log("2: " + game.data.dataArray[0]); } );
Выходы:
Uncaught melonJS: level <br /> <font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'> <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-...<omitted>...nd
Если вы используете $.getJSON
и вы предоставляете действительный json, вам не нужно ничего разбирать, поэтому вы можете изменить свой php на:
if ($row = $result->fetch_assoc()) { echo json_encode($row); exit; // You're limiting the number of rows to 1, so there is no need to continue }
И javascript:
$.getJSON("php/CRUD.php", {"_functionToRun" : ""}, function (returned_data) { // you can push `returned_data` to an array / add it to an object, // but then you need to keep track of its index log("1: " + returned_data.experience); //output: `1: 120` log("2: " + returned_data.levelname); //output: `2: mymap2` } );
Что вам нужно сделать, измените этот код:
while ($row = $result->fetch_assoc()) { $message = $row['experience'] . $row['levelname']; }
Чтобы сделать его как массив:
while ($row = $result->fetch_assoc()) { $message[] = $row['experience'] . $row['levelname']; }
Таким образом, $message
теперь становится массивом. Вы должны передать это клиенту. Вы можете сделать это, используя:
die(json_encode($message));
Причина в том, что в вашем коде он выводит только последний.