Лучший способ передать массив между PHP и Javascript

Итак, у меня есть массив записей, полученных из базы данных. Массив имеет формат;

$rows[0]['id']=1;
$rows[0]['title']='Abc';
$rows[0]['time_left']=200;


$rows[1]['id']=2;
$rows[1]['title']='XYZ';
$rows[1]['time_left']=300;
//And so on upto 10-20 rows

Как лучше всего передать этот массив моему коду javascript? Я бы хотел, чтобы javascript имел возможность перебирать все записи и, используя атрибут id, обновлять div с этим идентификатором с некоторой информацией.

Мой код javascript находится во внешнем файле .js, но я могу выполнить код php в коде HTML моей страницы. Так что я мог сделать что-то вроде этого:

В my_file.js:

var rows=New Array();

В HTML-коде:

<html>
<head>
<script type = "text/javascript" src = "js/my_file.js"></script>

<script type = "text/javascript">
<? foreach ($rows as $row):?>
<? extract($row);?>
rows[<?=$id;?>]['title'] = "<?=$title;?>";
//And so on
<? endforeach;?>
</script>
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
20
0
34 103
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Я обычно использую для этого объект JSON:

  • На стороне сервера JSON кодирует ваши данные: json_encode($data);
  • На стороне JavaScript я пишу функцию, которая принимает объект JSON в качестве параметра и распаковывает его.

Когда вы распаковываете объект, вы можете распечатать содержимое массива в теге <DIV> или в любом другом месте страницы (jQuery отлично с этим справляется).

Как распаковать объект JSON с помощью javascript? Не могли бы вы добавить к своему ответу образец кода для этого и образец распакованного объекта? Спасибо

Click Upvote 26.12.2008 08:17

Проверьте это: ditio.net/2008/07/17/php-json-and-javascript-usage

rg88 26.12.2008 08:34

MooTools также кодирует / декодирует JSON: mootools.net/docs/core/Utilities/JSON

samvermette 24.02.2010 08:40

Чтобы ответить на ваш вопрос (и мой ответ, у меня закончилось место в ответе на комментарий), вот очень упрощенное подмножество кода, который я использую:

Обработчик Javascript AJAX в jQuery:

$.ajax({
   type: "POST",
   url: "BACKEND.php",
   timeout: 8000,
   data: "var1 = " + myVar,
   dataType: "json",
   error: function(){
     $("#DIVID").html("<div class='error'>Error!</div>");
   },  
   success: function(jsonObj){
     $("#DIVID").html(jsonObj.mydata);
   }
 });


PHP Array:
$data['mydata'] = $myData;

Последний вопрос. Я попробовал, и теперь я получаю «объект» в javascript, который содержит каждую из моих строк, поэтому я думаю, что смогу получить к нему доступ как myObj [0] .title или myObj [1] .title. Проблема в том, что если я хочу получить название чего-либо по его идентификатору, как я могу его найти. Идентификатор будет в myObj [1] .id или myObj [0] .id.

Click Upvote 26.12.2008 09:05

Попробуйте добавить точку Obj.1.id Подробнее о нотации JSON hunlock.com/blogs/Mastering_JSON_ (JavaScript_Object_Notation‌) см. Var myObject = {'color': 'blue', 'animal': {'dog': 'friendly'}}; документ.writeln (myObject.animal.dog); // выводит дружественный

barfoon 26.12.2008 09:37

Приношу свои извинения за ужасное форматирование.

barfoon 26.12.2008 09:37

На самом деле я хотел знать, что если у меня есть идентификатор строки, но не индекс массива, как я могу идентифицировать его, не просматривая все строки. То есть: я хочу myObject [X] .title, где myObject [X] .id = 4. Вот икс то, что я хочу. Кстати, я принимаю твой ответ, потому что ты уже очень помог :)

Click Upvote 26.12.2008 09:51

Если вы выполняете встроенные данные, мне всегда нравилось делать

<script type = "text/javascript">
window.sitescriptdata = {}; 
window.sitescriptdata.foo = ( <?php echo json_encode( $structure ); ?> );
</script>

Для основных вещей, вы избавляетесь от обратного вызова AJAX. Кроме того, если вы хотите приклеить данные к узлу DOM, мне очень нравится метод «метаобъектов».

<div id = "foobar">
 <div><object class = "metaobject">
        <param name = "data" value = "<?php echo htmlentities(json_encode($data), ENT_QUOTES );?>" />
 </object></div>
</div> 

Это может выглядеть не очень хорошо, но это эффективный способ связать данные напрямую с узлом DOM без необходимости знать точный уникальный путь к этому узлу. Очень удобно, если у вас много наборов данных, которые нужно привязать к определенным элементам экрана.

Я обычно использую плагин http://noteslog.com/metaobjects/ для jQuery, но он настолько прост, что я иногда писал его сам (было время, когда я не мог найти плагин, но я знал, как он работает)

Когда это будет сделано, будет

$ ("div # foobar> div"). get (). data. ($ yourarrayhere)

Видно для вашего кода.

Я все еще довольно новичок, тоже скажу, что, возможно, этот метод не самый безопасный, но вы всегда можете превратить свой массив javascript в строку, а затем передать его через URL-адрес для php в GET.

так:

for(var i=0;i < jsarray.length;i++) 
{
var x = jsarray[i];
urlstring += "myvalue[] = "+x+"&";
}

document.location.href = "mypage.php?"+urlstring;

а затем php будет:

$phparray = $_GET['myvalue'];

надеюсь, это поможет

В примере AJAX, таком как здесь, вы можете решить эту проблему следующим образом:

.php файл (функция возврата ajax)

$myArray = array("object_id"=>1, "object_title"=>"Testobject");
return json_encode($myArray);

.js файл (функция javascript)

...
if (g_httpRequest.readyState == 4)
{
var jsonRes = JSON.parse(g_httpRequest.responseText);
alert(jsonRes.object_title)
}
...

Другие вопросы по теме