0

这是我的第一个问题!

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

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

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

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

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

我曾考虑在解析后仅存储“[name='foo']”和 jQuerying,但这不适用于我想要链接的情况,例如上面的情况.closest('.bar')

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

4

2 回答 2

1

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

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

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

eval(errorInfo.errorocation);
于 2013-03-21T04:27:36.020 回答
0

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

json = jQuery.parseJSON("{ 'errorlocation' : 'jQuery(\'[name=\"foo\"]\').closest('.bar')' }");
location = eval(json.errorlocation) //runs the jQuery string
于 2013-03-21T04:21:29.060 回答