Подтвердить что ты не робот

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

Ответ 1

Я склонен использовать для этого объект JSON:

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

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

Ответ 2

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

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

Для базовых вещей, вы сохраняете обратный вызов AJAX. Кроме того, если вы хотите приклеить данные к DOM node, то "метаобъект" - это то, что я действительно люблю.

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

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

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

Когда закончите, будет

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

Видимый для вашего кода.

Ответ 3

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

Обработчик 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;

Ответ 4

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

Ответ 5

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

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