Обработка формата JSON на JQuery

Avron2

Новичок
Сервер в формате JSON возвращает следующее:

PHP:
{"id":[  "29",
         "28",
         "27",
         "26",
        ],
  "title":[
            "1964",
            "1976 ,
            "1982 ,
            "1992"
           ],
  "path_little":[
                     "photos\/vipuski\/1964_l.jpg",
                     "photos\/vipuski\/1976_l.jpg",
                     "photos\/vipuski\/1982_l.jpg",
                     "photos\/vipuski\/1992_l.jpg"
                   ]
}
Как обработать на JQuery это чудо? Здесь массив картинок, где
id - ид картинки
title - название
path_little - путь к картинке

Моя задача вытащить на каждой итерации:
29 - 1964 - photos\/vipuski\/1_l.jpg
28 - 1976 - photos\/vipuski\/1976_l.jpg
и т.д.

Вот мои попытки это сделать:

PHP:
    $.getJSON('get_photos.php?id=' + $(this).val(), function(data) {
           $.each(data, function(i, j)   {
                 $('#photos').append('<p>' + data.id[j] + '</p><p>' + data.title[j] + '</p><p>' + data.path_little[j] + '</p>');
          });
    });
Здесь i на 3-х итерациях принимает значение:
id, title, photo_little,
а j принимает значения:
["29", "28", "27", "26"], ["1964", "1976 , "1982 , "1992"], ["photos\/vipuski\/1964_l.jpg", "photos\/vipuski\/1976_l.jpg", "photos\/vipuski\/1982_l.jpg", "photos\/vipuski\/1992_l.jpg" ]

Ответ:
PHP:
undefined
undefined
undefined
undefined
В серверной части формирую массив следующим образом:

PHP:
        while($album_name = mysql_fetch_array($db_q))   {
            $arr['id'][$i] = $album_name['id'];
            $arr['title'][$i] = $album_name['title'];
            $arr['path_little'][$i] = $album_name['path_little'];
            $i++;
        }
             
        // convert - моя функция      
        echo json_encode(convert('cp1251', 'utf-8',$arr));

Интернет перерыл весь. Есть всякое, но вот обработки такого массива я не нашел. Нашел всякие извращения (for-ом перебор и т.д.), но ведь есть более правильный способ обработки такого JSON средствами JQuery
 

Adelf

Administrator
Команда форума
во-первых JSON тут идиотский. совсем не логичный.
Нормальный был бы такой:
PHP:
[{"id":"29",
"title":"1964",
"path_little":"photos\/vipuski\/1964_l.jpg"
},
{"id":"28",
"title":"1976",
"path_little":"photos\/vipuski\/1976_l.jpg"
},
...
Тогда и вопросов бы не возникло. А так.. each надо делать по data.id. Тогда будет нормально.. data.id[j], data.title[j] и т.д.
 

Adelf

Administrator
Команда форума
PHP:
while($album_name = mysql_fetch_array($db_q))   {
            $arr[] = array('id' => $album_name['id'], 'title' => $album_name['title'], 'path_little' => $album_name['path_little']);
            // а может быть вообще $arr[] = $album_name; ?
        }
             
        // convert - моя функция      
        echo json_encode(convert('cp1251', 'utf-8',$arr));
 

Avron2

Новичок
Не работает

После изменения возвращаемого массива сервером, ответ стал таким:
PHP:
[
   {"id":"29","title":"\u0433\u043e\u0434 \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d","path_little":"photos\/vipuski\/1_l.jpg"},
   {"id":"28","title":"1964","path_little":"photos\/vipuski\/1964_l.jpg"},{"id":"27","title":"1976 \u0433\u043e\u0434","path_little":"photos\/vipuski\/1976_l.jpg"},
   {"id":"26","title":"1989","path_little":"photos\/vipuski\/1979_l.jpg"},
   {"id":"25","title":"1980 \u0433\u043e\u0434","path_little":"photos\/vipuski\/1980_l.jpg"},
   {"id":"24","title":"1982 \u0433\u043e\u0434","path_little":"photos\/vipuski\/1982_l.jpg"},
   {"id":"2","title":"2007 \u0433\u043e\u0434","path_little":"photos\/vipuski\/2007_l.jpg"}
]
Изменил код JQuery, он стал таким:
PHP:
                    $.getJSON('get_photos.php?id=' + $(this).val(), function(data) {
                         $.each(data, function(i,j){
                                $('#photos').append('<p>' + data.id[j] + '</p><p>' + data.title[j] + '</p><p>' + data.path_little[j] + '</p>');
                         });
                    });
Помогите, а то я сойду с ума...
 

AiK099

Новичок
PHP:
var url = 'get_photos.php?id=' + $(this).val();

$.getJSON(
	url,
	function(data) {
		for (var i in data) {
			var row = data[i];
			
			$('#photos').append('<p>' + row.id + '</p><p>' + row.title + '</p><p>' + row.path_little + '</p>');
		}
	}
);
Я думаю не стоит использовать jQuery.each функция не на коллекциях HTML элементов (хотя она и работает).
 

Avron2

Новичок
А как тогда. Из ответа с помощью функции
PHP:
$arr = eval('(' + data + ')');
делать массив и обрабатывать его?

Хотя я уверен, что должен быть ответ на мой вопрос.
 

Adelf

Administrator
Команда форума
Avron2
массив сделает jQuery. а вот перебирать его лучше обычным for.
 

Avron2

Новичок
PHP:
var url = 'get_photos.php?id=' + $(this).val();

$.getJSON(
	url,
	function(data) {
		for (var i in data) {
			var row = data[i];
			
			$('#photos').append('<p>' + row.id + '</p><p>' + row.title + '</p><p>' + row.path_little + '</p>');
		}
	}
);
Я думаю не стоит использовать jQuery.each функция не на коллекциях HTML элементов (хотя она и работает).
Спасибо. Сейчас попробую.
 

tz-lom

Продвинутый новичок
PHP:
                    $.getJSON('get_photos.php?id=' + $(this).val(), function(data) {
                         $.each(data, function(i,j){
                                $('#photos').append('<p>' + data.id[j] + '</p><p>' + data.title[j] + '</p><p>' + data.path_little[j] + '</p>');
                         });
                    });
ну и что это за чушь?
доку по jQuery читай, callback в each вызывается с двумя параметрами - индекс и значение , типа $key=>$value в PHP
а ты вместо того чтобы использовать это значение пытаешься из массива вытянуть значения с такими ключами т.е. совсем не то
 

Avron2

Новичок
ну и что это за чушь?
доку по jQuery читай, callback в each вызывается с двумя параметрами - индекс и значение , типа $key=>$value в PHP
а ты вместо того чтобы использовать это значение пытаешься из массива вытянуть значения с такими ключами т.е. совсем не то
Спасибо. Я уже разобрался. AiK099 помог.
 
Сверху