Я выполняю простой пример ajax> php> mysql, размещенный здесь http://openenergymonitor.org/emon/node/107
Я могу отображать только информацию из первой строки. Моя таблица настроена так
-------------- | id | name| -------------- | 1 | Pat | | 2 | Joe | | 3 | Rob | --------------
Код php
$result = mysql_query("SELECT * FROM $tableName"); //query $array = mysql_fetch_row($result); //fetch result echo json_encode($array);
Сценарий
$(function () { $.ajax({ url: 'api.php', data: "", dataType: 'json', success: function(data) { var id = data[0]; //get id var vname = data[1]; //get name $('#output').html("<b>id: </b>"+id+"<b> name: </b>"+vname); } }); });
ROW 1
Если я поместил var id = data[0];
Я получаю значение 1. Если я поместил var name = data[1];
Я получаю Пэт.
ROWS 2 n 3 не определены
Пример var id=data[2];
возвращает undefined и т. д.
Мои вопросы
Почему я получаю только значения из первой строки?
Как я могу получить информацию для строк, отличных от первой?
Из других вопросов в Stackoverflow я вижу, что мне, вероятно, придется использовать цикл while, но я не совсем уверен, почему и как.
Старое расширение mysql
устарело, лучше использовать mysqli
или PDO
!
mysql_fetch_row()
возвращает только 1 строку! Вы должны положить его в цикл, например:
$data = array(); while ( $row = mysql_fetch_row($result) ) { $data[] = $row; } echo json_encode( $data );
Вы также должны изменить JavaScript:
$.ajax({ url: 'api.php', data: "", dataType: 'json', success: function(rows) { for (var i in rows) { var row = rows[i]; var id = row[0]; var vname = row[1]; $('#output').append("<b>id: </b>"+id+"<b> name: </b>"+vname) .append("<hr />"); } } });
Кстати, я бы рекомендовал вам использовать mysql_fetch_assoc()
потому что это делает ваш код более гибким и чистым.
$ result = mysql_query ("SELECT * FROM $ tableName"); $ array = array (mysql_fetch_row ($ result));
while ($ row = mysql_fetch_row ($ result)) {$ array [] = $ row; } echo json_encode ($ array);