Поэтому у меня есть массив записей, полученных из базы данных. Массив находится в формате;
$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_encode($data);
Когда вы распаковываете объект, вы можете распечатать содержимое массива в <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'];
надеюсь, это поможет