jQuery « Обработка JSON-данных в JQUERY

Код такой:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

    $.ajax({
      url: 'url',
      type: 'post',
      dataType: 'json',
      data: ({filter: data}),
      success: function(data)
      {
        $.each(data, function(i, val) {  
          alert(val);
        });
      }
    });

 


Формат отправляемых данных такой:

data = '{"f_bool":"' + $('.f_bool').text() + '"}';

Формат получаемых данных:

"{"f_bool":"u0438"}"

В результате выводит ответ посимвольно, а надо в формате ключ – значение

1 ответов


Если в переменной val лежит {\"f_bool\":\"\u0438\"}, то вам поможет следующий код:


var data = eval( '(' + val+ ')' );
 
Теперь в data массив всякой разной глубины.

Используем библиотеку json2.js - о ней читать здесь
Отправка данных:


var data = new Object();
data.f_bool = $('.f_bool').text();
data.field2 = 56; // и т.д.
$.ajax({type:       "POST",
            url:        "/example.com/controller.php",
            data:       {data: encodeURIComponent(JSON.stringify(data))},
            dataType:   'json',
            error:      function() {
                alert("Internal error occured!");
            },
            success:    function (data) {
                 alert(data);
            }
});
 

На стороне сервера (controller.php):

$data = json_decode(urldecode($_REQUEST["data"]));
// обработка данных $data->f_bool, формирование $response
echo json_encode($response);
 

PS: подобный формат передачи данных обеспечит передачу вложенных массивов и объектов любой глубины.

PS: если есть русские символы, то json_decode/json_encode работает только в кодировке UTF-8, соответственно надо перекодировывать, либо пользовать зендовские классы для кодирования-декоридования json.

PPS: А вообще, все что передается через POST/GET - эскейпится автоматом, но если делать это ручками - то остается уверенность, что при приеме нужно анэскейпить тоже ручками. Иногда действительно не ясно, как придут отправленные данные.

Вот две ссылки которые помогут тебе разобраться с json в jQuery
http://www.linkexchanger.su/2008/40.html
http://www.linkexchanger.su/2008/41.html