我有以下JSON(已被剪切空间),正如您在“test”和“tooltip”中看到的,我有一个需要包含函数“formatter”的属性(请注意,此JSON是从XML文件并在.NET中转换为JSON)
{
"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 +' %';}
}
}
不幸的是,我在生成JSON文件的ASPX页面上收到错误
There was an error parsing the JSON document. The document may not be well-formed.
这个错误是由于“格式化程序”之后的位不是引号,因为它认为它是一个字符串。但如果我在它周围放一个字符串,那么使用JSON的前端html页面看不到该函数。
是否可以将其作为函数传递而不是字符串?
非常感谢。
编辑:
感谢您的快速回复。正如我所说,我知道上面的JSON不正确,因为“function(){...}”部分不在引号中。读取JSON文件的前端是第三方,所以我想知道如何通过该函数,我理解注入的问题(从SQL的角度来看)并理解为什么它不可能在JSON中(不适用于JSON之前)。
答案 0 :(得分:2)
如果您将其作为字符串传递,可以使用Javascripts EVAL函数,但EVAL是EVIL。
如何在中途使用对象表示法格式?
这是我在工作时使用的模板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);