JSON值中的jQuery对象

时间:2013-03-21 04:17:00

标签: javascript jquery json

这是我的第一个问题!

我通过AJAX调用JSON以在客户端验证库中使用。该库要求我指定当前规则我希望插入错误消息的位置。对于我的静态验证规则,我可以编写一个对象,例如:

{ 'errorlocation' : jQuery('[name="foo"]').closest('.bar') }

我的验证库允许我在第一个init之后注入更多规则,因此当我通过REST提交模型时,我可能会收到有错误的服务器响应。我目前正在开发该服务器响应。我更希望错误响应只是一个验证规则数组,以便我以后可以将这些规则注入到已在我的页面上创建的同一验证对象中。因此,在响应JSON中,我需要这样的定义,如上面的代码片段中那样。

似乎Backbone和jQuery的解析json算法无法评估对象的jQuery()值,即使jQuery在全局命名空间中肯定可用。所以这不起作用:

jQuery.parseJSON("{ 'errorlocation' : jQuery('[name=\"foo\"]').closest('.bar') }");

我考虑过只存储" [name =' foo']"和j在解析之后查询但是对于我想要链接的情况不起作用,例如上面.closest('.bar')

有没有人知道将解析/允许位于全局命名空间中的变量的JSON解析器?

2 个答案:

答案 0 :(得分:1)

JSON是一种数据格式,而不是代码格式。通常,您希望以将数据从服务器传递到客户端的方式构建系统,然后客户端使用数据来确定操作。因此,您可能会将foo.bar作为数据传递回来,并将另一个参数传递回来确定要运行的函数。

如果您真的需要这样设计,我建议不要这样做,您可以使用eval将任意字符串评估为javascript,如下所示:

var errorInfo = jQuery.parseJSON(
    "{ 'errorlocation' : \"jQuery('[name=\"foo\"]').closest('.bar')\" }");

eval(errorInfo.errorocation);

答案 1 :(得分:0)

您是否考虑将整个jQuery调用存储为字符串,然后在客户端运行eval?像这样:

json = jQuery.parseJSON("{ 'errorlocation' : 'jQuery(\'[name=\"foo\"]\').closest('.bar')' }");
location = eval(json.errorlocation) //runs the jQuery string