用于包含函数引用的jQuery.ParseJSON()

用于包含函数引用的jQuery.ParseJSON(),jquery,json,Jquery,Json,我在ASP.NETWebForms应用程序中有一个回调函数,我试图将一些方便的JSON返回给它,以便javascript函数管理数据。我能够发回一个包含我所有数据的JSON字符串,但现在我尝试获得以下结构: { data: dataGoesHere function: function(){alert('hello');} } 对于返回如下字符串的简单情况,jQuery.parseJSON非常有效: "{\"data\" : \"dataGoesHere\"}" 但一旦你想做这样的事 "

我在ASP.NETWebForms应用程序中有一个回调函数,我试图将一些方便的JSON返回给它,以便javascript函数管理数据。我能够发回一个包含我所有数据的JSON字符串,但现在我尝试获得以下结构:

{
 data: dataGoesHere
 function: function(){alert('hello');}
}
对于返回如下字符串的简单情况,jQuery.parseJSON非常有效:

"{\"data\" : \"dataGoesHere\"}"
但一旦你想做这样的事

"{
   \"data\" : \"dataGoesHere\"
   \"function" function(){alert('hello');}
}"
jQuery抛出一个异常。我想知道是否有可能创建一个字符串,以便jQuery可以解析为JSON,其中包含一个函数引用,我可以稍后调用

我希望这是有道理的。感谢您的时间和回复

这不是有效的JSON。
出于安全原因,jQuery拒绝了它,以防止您尝试执行的操作

相反,您可以调用
eval
,将其解释为Javascript文本。

请注意,您需要将其括在括号中,以确保它被解析为表达式而不是块。

您可以将其设置为有效的JSON并使用
eval

编辑:
j=jQuery.parseJSON(“{\'data\”:\“datagoesher\”,“function\”:\“{alert('test');}\”)


eval(j.function)

您可以这样做:

"{\"data\" : \"dataGoesHere\"}"
示例:


尝试将函数作为字符串传递,然后对clientJSON执行求值!=JavaScript。JSON只是JavaScript的一个子集。您的结构不是JSON。@thorn:似乎OP正在尝试创建JSON数据,但包含无效内容。第一个代码示例是解析后的预期结果。有效的JSON不能包含函数文本,因此您的建议不可能……并告诉jQuery将
text
而不是
JSON
作为从服务器发送的数据类型。在javascript var foo={bar:function(){alert('hi');}}内调用foo.bar()看起来很好,那么为什么它不是有效的JSON呢?@Justin:JSON是Javascript的一个子集。他们不一样。JSON不支持函数文本(或调用)。太棒了,这回答了我的问题。谢谢你的意见!我的错误是没有检查javascript与JSON的更多细节。再次感谢@斯拉克斯:你赶时间吗;o) 我只是在演示一种使用
parseJSON
的方法。你说得对,
eval()
会更快。但是它应该总是比解析快。@patrick:
parseJSON
也调用
eval
(或者更准确地说,
新函数(…)
)。(除非浏览器本机支持)@SLaks:是的,我知道。我不知道你的意思是什么。我同意你的看法,
eval()
比解析JSON数据快。@patrick:解析JSON数据使用eval(加上验证正则表达式)。您的计算速度较慢,因为您计算了两次。@SLaks:Yes(这取决于实现),但您认为哪个更快,regex plus
eval()
,还是只调用一次
eval()