В этой статье я поведаю тебе %username%, как работать с JSON, а так же как вывести дамп любой переменной javascript для дебага.
Сначала немного теории. И так, основываясь на определение взятом с Wikipedia.
JSON — это текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми.
Так как лично я являюсь идолопоклонником языка Ruby и в частности фрэймворка Ruby on Rails, то пример серверной части буду описывать именно на нем. Хотя, принцип во всех языках одинаковый, я думаю любители других языков без проблем разберутся.
На серверной части пишем, что то вроде:
На клиенте выполняем JavaScript (внимание, не забудьте подключить библиотеку prototype):
Или можно сделать на Ruby on Rails так:
Для var_dump лучше конечно использовать не alert, а создать, например:
Функций для вывода дампа информации о переменной на JavaScript великое множество. Я предпочитаю использовать функцию, которую подглядел здесь. Может, и не самый изящный вариант, но меня устраивает. Вот её код:
Вот и все. На последок, ИМХО, строка cгенерированная JSON-ом, на много компактнее и изящнее, чем делать контроллер для генерации динамического JavaScripta, как здесь. Или, упаси вас бог, отдавать через Ajax.Updater готовую страницу с уже расставленными HTML тэгами.
Сначала немного теории. И так, основываясь на определение взятом с Wikipedia.
JSON — это текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми.
Так как лично я являюсь идолопоклонником языка Ruby и в частности фрэймворка Ruby on Rails, то пример серверной части буду описывать именно на нем. Хотя, принцип во всех языках одинаковый, я думаю любители других языков без проблем разберутся.
На серверной части пишем, что то вроде:
def MyController < ApplicationController
def give_me_json
data = Model.find(params[:id])
# нужно, что бы тип контента был text/plain
response.headers['Content-type'] = "text/plain; charset=utf-8"
render :text => data.to_json
end
end
На клиенте выполняем JavaScript (внимание, не забудьте подключить библиотеку prototype):
new Ajax.Request('/MyController/give_me_json', {
asynchronous:true, evalScripts:true,
onComplete:function(request) {
var x = eval('(' + request.responseText + ')');
alert(var_dump(x));
},
})
Или можно сделать на Ruby on Rails так:
<%= remote_function(:complete => "var x = eval('(' + request.responseText + ')'); alert(var_dump(x));",
:url => { :action => 'give_me_json', :id => link.id }) %>
Для var_dump лучше конечно использовать не alert, а создать, например:
<div id='debug_element'></div>
, и выводить путем $('debug_element').innerHtml = var_dump(object);
Функций для вывода дампа информации о переменной на JavaScript великое множество. Я предпочитаю использовать функцию, которую подглядел здесь. Может, и не самый изящный вариант, но меня устраивает. Вот её код:
function var_dump(arr,level) {
var dumped_text = "";
if(!level) level = 0;
//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += " ";
if(typeof(arr) == 'object') { //Array/Hashes/Objects
for(var item in arr) {
var value = arr[item];
if(typeof(value) == 'object') { //If it is an array,
dumped_text += level_padding + "'" + item + "' ...\n";
dumped_text += var_dump(value,level+1);
} else {
dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
}
}
} else { //Stings/Chars/Numbers etc.
dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
}
Вот и все. На последок, ИМХО, строка cгенерированная JSON-ом, на много компактнее и изящнее, чем делать контроллер для генерации динамического JavaScripta, как здесь. Или, упаси вас бог, отдавать через Ajax.Updater готовую страницу с уже расставленными HTML тэгами.