функция в формате JSON - возможно? - PullRequest
0 голосов
/ 06 мая 2011

У меня нижеприведенный JSON (обрезан для пробела), как вы можете видеть в «test» и «tooltip». У меня есть свойство, которое должно содержать функцию «formatter» (обратите внимание, что этот JSON читается изXML-файл и преобразованный в JSON в .NET)

{
   "test": {
      "formatter": function(){return '<b>'+ this.point.name +'<\/b>: '+ this.y +' %';}
   },
   "title": {
      "align": "center", 
      "text": "Your chart title here" 
   },
   "tooltip": {
      "formatter": function(){return '<b>'+ this.point.name +'<\/b>: '+ this.y +' %';}
   } 
}

К сожалению, я получаю сообщение об ошибке на странице ASPX, которая создает файл JSON

There was an error parsing the JSON document. The document may not be well-formed.

Эта ошибка связана сДело в том, что бит после «форматера» не заключен в кавычки, так как считает, что это строка.но если я помещу строку вокруг нее, то внешняя html-страница, использующая JSON, не видит функцию.

Возможно ли передать это как функцию, а не строку?

Большое спасибо.


Редактировать:

Спасибо за быстрый ответ.Как я уже сказал, я знаю, что вышеприведенное неверно в JSON из-за того, что часть "function () {...}" не заключена в кавычки.Внешний интерфейс, который читает файл JSON, является сторонним, поэтому мне было интересно, как я мог бы передать функцию, я понимаю проблемы внедрения (с точки зрения SQL) и понимаю, почему это невозможно в JSON (не работал сJSON раньше).

1 Ответ

2 голосов
/ 06 мая 2011

Если вы передали его в виде строки, вы могли бы использовать функцию EVAL Javascripts, но EVAL - это ЗЛО.1006 * Это плагин шаблона jquery, который я использую на работе, $ .fn.extend показывает этот формат записи.

/*jslint browser: true  */
/*global window: true, jQuery: true, $: true */

(function($) {

    var MyPlugin = function(elem, options) {

        // This lets us pass multiple optional parameters to your plugin
        var defaults = {
            'text' : '<b>Hello, World!</b>', 
            'anotherOption' : 'Test Plugin'
        };

        // This merges the passed options with the defaults
            // so we always have a value
        this.options = $.extend(defaults, options);
        this.element = elem;
    };

    // Use function prototypes, it's a lot faster.
    // Loads of sources as to why on the 'tinternet
    MyPlugin.prototype.Setup = function()
    {
        // run Init code
        $(this.element).html(this.options.text);
    };

    // This actually registers a plugin into jQuery
    $.fn.extend({

        // by adding a jquery.testPlugin function that takes a 
            // variable list of options
        testPlugin: function(options) {

            // and this handles that you may be running
                    // this over multiple elements
            return this.each(function() {
                var o = options;

                // You can use element.Data to cache 
                            // your plugin activation stopping 
                            // running it again;
                // this is probably the easiest way to 
                            // check that your calls won't walk all 
                            // over the dom.
                var element = $(this);
                if (element.data('someIdentifier'))
                {
                    return;
                }

                // Initialise our plugin
                var obj = new MyPlugin(element, o);

                // Cache it to the DOM object
                element.data('someIdentifier', obj);

                // Call our Setup function as mentioned above.
                obj.Setup();
            });
        }
    });
})(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...