Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обработка json в jquery (https://javascript.ru/forum/jquery/14660-obrabotka-json-v-jquery.html)

vitja 25.01.2011 10:48

Обработка json в jquery
 
Здравствуйте. Нужно сделать взаимные селекты.
В итоге, после выполнения ajax запроса постом к php скрипту, возвращаю (print(json_encode()) ) json массив.
Выглядет он примерно так:
[{"id":1,"title":"Легковая"},{"id":2,"title":"Грузовая"}]

Нужно обработать массив и запихнуть в dom шаблона. Гуглил, нащёл пример обработки json циклом each, но толком ничего не получилось в итоге сделать. Буду благодарен за помощь, спасибо

Skipp 25.01.2011 11:09

Вы хотите получить готовый скрипт, это в раздел работа, а если хотите просто хотите помощи, тогда пишите что именно у вас не выходит и возможно кто-нибудь что-нибудь подскажет.

vitja 25.01.2011 18:34

И Skipp, мне не нужен готовый скрипт!

У меня вопрос. Вот есть такая конструкция из сайта jquery.com:
$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){
    alert("JSON Data: " + json.users[3].name);
    });


Мне непонятно , что собой представляет users[3] , откуда появился этот массив с индексом и массив ли это вообще ?

micscr 26.01.2011 08:53

Цитата:

Мне непонятно , что собой представляет users[3] , откуда появился этот массив с индексом и массив ли это вообще ?
ну он может появиться очевидно от одного отправщика - сервера.
Установи fitebug в лисе, вот тут добавь:
function(json){
  console.log(json); // <----

и увидишь, что приходит и в каком формате.

Skipp 26.01.2011 09:10

vitja,
Так бы сразу и писал, что тебе непонятно.
Глянь на первую строку
Цитата:

Здравствуйте. Нужно сделать взаимные селекты.
Такой текст обычно пишут те кто хочет что-то на халяву, поэтому такая и реакция:)

$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){
    alert("JSON Data: " + json.users[3].name);
    });

В данном случаи после ответа сервера вызывается функция function(json), в которую передаётся аргумент(json) хранящий в себе ответ сервера преобразованный в json тип(объект), а далее вызывается алерт в который передаётся объект json со свойством users который тоже является объектом(возможно Array) у которого выбирается ещё один объект с индексом 3 у которого есть свойство name.
:)

vitja 26.01.2011 09:29

Skipp , micscr благодарю, буду пробывать, если будут вопросы отпишусь

vitja 27.01.2011 14:15

Skipp, пожалуй возвращусь к сути вопроса:
Цитата:

нужно обработать массив и запихнуть в dom шаблона
Цитата:

если просто хотите помощи, тогда пишите что именно у вас не выходит
А не выходит у меня именно вот что:
$(result).each(function(i) {
               	  alert(i.title);
                   });

Выдаёт undefined. Как правильно этот массив разобрать?

Skipp 27.01.2011 15:02

можно побольше кода, а то так не понятно что такое result и что такое i

vitja 27.01.2011 16:30

Skipp, примерно вот так получается ..
$("select[name=kind[]]").change(function() {
		
		var kind_id = $(this).val();
		url = "/admin/add";
		$.post(
	            url,
	            "kind=" + kind_id,
	               function (result) {
	               // $('body').html(result); // возвращает [{"id":1,"title":"Легковое"}, {"id":2,"title":"Грузовое"}]                
	                  $(result).each(function() {
               	  alert($(result).id);
                       });
	                  
	            }
		 ),"json";

		 

		});

PHP
if($_POST) { 
    $types =  $this -> prop_type($_POST['kind']); 
    $regions = array();
    foreach ($types as $id => $title) {
        $regions[] = array('id'=>$id, 'title'=>$title);
     
    }
     print(json_encode($regions)); // [{"id":1,"title":"Легковое"}, {"id":2,"title":"Грузовое"}]   
         }

Skipp 27.01.2011 16:54

А такая конструкция что выдаст?
$("select[name=kind[]]").change(function() {
		var kind_id = $(this).val();
		url = "/admin/add";
		$.post(
	            url,
	            "kind=" + kind_id,
	               function (result) {
	                  alert(typeof result);
	            }
		 ),"json";
});


Часовой пояс GMT +3, время: 07:27.