Intereting Posts
php-конкатенация для настройки URL-адреса. Как это сделать? mcrypt encrypt добавляет s-связку '% 00' до конца строки Можно создать фабрику для создания экземпляров пользовательских форм? проверить, существует ли строка с mysql Как закрыть цикл PHP, который вставляет из DOM в MySQL Рабочий процесс UTF8 PHP, MySQL обобщен Как отобразить страницу 404 Apache по умолчанию в PHP Как удалить файл через PHP? Поиск запрещенных слов на странице, а не в других словах Как я могу заставить PHP скомпилировать документ LaTeX, если он (www-data) не может получить доступ к требуемым пакетам? Отправьте данные формы html в базу данных sql через php (используя mysqli) Как я могу заставить целочисленные значения json_encode PHP быть закодированными как String? Создание HTML: на стороне сервера на стороне сервера и на стороне jQuery Выберите строки из таблицы MySQL, где value – массив? LAMP отображает php-ошибки

Лучший способ передать массив между 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> 

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

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

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

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

 <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 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; 

В примере 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) } ... 

im все еще довольно новый тоже сказать, может быть, этот метод не самый безопасный, но вы всегда можете превратить свой массив 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']; 

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