如何通过JSON传递函数名称并在javascript/jQuery中调用它?

fre*_*ent 5 javascript parameters jquery triggers function

我有一个JSON字符串,其中包含我需要调用的函数.

我的JSON看起来像这样:

{  
    "type":"listview",
    // the function I would like to call
    "content":"dynoData.getRetailers()",
    "custom_classes":["","nMT pickList","",""],
    "lib":"static_listview.html",
    "tmp":"tmp_listview_inset",
    "lang":"locale_search",
    ...
Run Code Online (Sandbox Code Playgroud)

我正在使用它在客户端上组装jQuery Mobile列表视图.要获取动态数据,我需要调用dynoData.getRetailers().

但是我很难打电话:-)

这就是我正在尝试的:

var dyn = $.parseJSON( passed_JSON_string ),
    content = dyn.content;
Run Code Online (Sandbox Code Playgroud)

我希望调用它会触发函数,但它只是将函数名称作为字符串返回.

问题:
如何触发实际功能?

谢谢!

编辑:
我将JSON字符串放在实际页面上的HTML元素上,我将替换为我正在构建的元素.这是HTML:

<ul data-template="true" data-config='{  
    "type":"listview",
    "content":"dynoData.getRetailers()",
    "custom_classes":["","nMT pickList","",""],
    "lib":"static_listview.html",
    "tmp":"tmp_listview_inset",
    "lang":"locale_search",
    "theme":"c",
    "filter":"true"
    }'></ul>
Run Code Online (Sandbox Code Playgroud)

我可以把所有这些都归入data-属性,但那会很混乱......

解决方案:这有效:

1)将JSON更改为:

..."method":"getRetailers", ...
Run Code Online (Sandbox Code Playgroud)

2)从Javascript调用:

content = dynoData[ dyn.method ]();
Run Code Online (Sandbox Code Playgroud)

感谢大家!

cha*_*tfl 5

假设函数始终是dyn对象的一部分,您可以使用以下符号来调用函数:

dyn['dynoData']['getRetailers']();
Run Code Online (Sandbox Code Playgroud)

所以,如果你能够调整json,你可以发回一些类似的东西:

"content":{ "mainObject": "dynoData" , "method" :"getRetailers"}
Run Code Online (Sandbox Code Playgroud)

并使用变量将其转换为动态函数:

  dyn[content.mainObject][content.method]();
Run Code Online (Sandbox Code Playgroud)

作为使用jQuery的示例,请尝试使用以下命令:

$('div')['hide']();
Run Code Online (Sandbox Code Playgroud)

这与以下相同:

$('div').hide()
Run Code Online (Sandbox Code Playgroud)