использование JSON в Ruby on Rails, плюс пример var_dump на Javascript

    В этой статье я поведаю тебе %username%, как работать с JSON, а так же как вывести дамп любой переменной javascript для дебага.

    Сначала немного теории. И так, основываясь на определение взятом с 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 тэгами.
    • –2
    • 5,4k
    • 9
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 9

      +4
      Ruby — язык, а Ruby on Rails — фрэймворк. Вы уж меня простите, но вы — идолопоклонник фрэймворка, а не языка.
        –2
        Да уже все исправил. Не ругайся, ибо не ведал, что тварю :-[
          –2
          Ну, я не ругаюсь. Просто констатировал факт. На самом деле сам сейчас занимаюсь изучением Ruby. Пока в восторге.
        –3
        console.debug(request);
          –2
          Немного разные вещи вообще то, сами проверьте ;-)
        • НЛО прилетело и опубликовало эту надпись здесь
            –1
            Зачем мне использовать блок respond_to в функцие построения облака тэгов, наприме? Если мне нужен от функции только json, не вижу смысла отдавать еще html и xml
            0
            Спасибо, будем пробовать.

            Сам пользуюсь Fiddler2 и плагин JsonViewer
              –1
              Комментарии в JavaScript коде выдают новичка:
              if(typeof(value) == 'object') { //If it is an array,
              ...
              } else { //Stings/Chars/Numbers etc.


              Так и не поянл о чём статья. Про JSON определение с wikipedia, а должно бы быть с json.org/json-ru.html
              Про JSON мало и не то, про Ruby тоже мало, про JavaScript сомнительный код, который где-то подглядели.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое