Итак, у меня есть массив записей, полученных из базы данных. Массив имеет формат;
$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 отлично с этим справляется).
Проверьте это: ditio.net/2008/07/17/php-json-and-javascript-usage
MooTools также кодирует / декодирует JSON: mootools.net/docs/core/Utilities/JSON
Чтобы ответить на ваш вопрос (и мой ответ, у меня закончилось место в ответе на комментарий), вот очень упрощенное подмножество кода, который я использую:
Обработчик 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.
Попробуйте добавить точку Obj.1.id Подробнее о нотации JSON hunlock.com/blogs/Mastering_JSON_ (JavaScript_Object_Notation) см. Var myObject = {'color': 'blue', 'animal': {'dog': 'friendly'}}; документ.writeln (myObject.animal.dog); // выводит дружественный
Приношу свои извинения за ужасное форматирование.
На самом деле я хотел знать, что если у меня есть идентификатор строки, но не индекс массива, как я могу идентифицировать его, не просматривая все строки. То есть: я хочу myObject [X] .title, где myObject [X] .id = 4. Вот икс то, что я хочу. Кстати, я принимаю твой ответ, потому что ты уже очень помог :)
Если вы выполняете встроенные данные, мне всегда нравилось делать
<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)
}
...
Как распаковать объект JSON с помощью javascript? Не могли бы вы добавить к своему ответу образец кода для этого и образец распакованного объекта? Спасибо