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"}"
В результате выводит ответ посимвольно, а надо в формате ключ – значение
/** * 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