Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript/jQuery中使用表单命名来访问json数据?_Javascript_Arrays_Json - Fatal编程技术网

在Javascript/jQuery中使用表单命名来访问json数据?

在Javascript/jQuery中使用表单命名来访问json数据?,javascript,arrays,json,Javascript,Arrays,Json,我有以下输入名称:dynamic[elements][1][slider][image1] 执行ajax调用时,将返回带有设置及其值的json响应 $.ajax({ url: '/get/settings', type: 'POST', data: formData, async: false, success: function (data) { }); 如何以最简单的方式获取dynamic[e

我有以下输入名称:
dynamic[elements][1][slider][image1]

执行ajax调用时,将返回带有设置及其值的json响应

$.ajax({
        url: '/get/settings',
        type: 'POST',
        data: formData,
        async: false,
        success: function (data) {

        });
如何以最简单的方式获取
dynamic[elements][1][slider][image1]
的值?它可以获得如下值:

data.dynamic.elements[1].slider.image1
因此:

但是,难道他们没有更好的方式获得价值吗?我必须获取值的唯一标识符是输入字段的名称,它是
dynamic[elements][1][slider][image1]
。所以我需要提取这个字符串,并将其作为
data.dynamic.elements[1].slider.image1组合在一起,然后以某种方式使其成为一个动态变量(最终获得值)

ajax响应示例:

{
    "success": 1,
    "dynamic": {
        "elements": [
            {
                "title": {
                    "title": "Our beautiful topic"
                }
            },
            {
                "slider": {
                    "image1": "5zw3ucypzp3qham.png",
                    "image1_link": "hellor"
                }
            }
        ]
    }
}

您可以选择编写泛型函数,以便从对象检索数据。函数应该如下所示。虽然函数可能不是万无一失的,但应该足以证明概念

function getObjectData(target, path) {

     // if the path is not in dot notation first convert 
     if (path.indexOf(".") == -1)
        path = path.replace(/\[/g, ".").replace(/\]/g, "");

    var parts = path.split(".");
    return parts.reduce(function (acc, currentVal) {
        return acc ? (acc[currentVal] || undefined) : acc;
    }, target);
}

//usage
getObjectData(data, "dynamic.elements.0.slider.image1"); //undefined
getObjectData(data, "dynamic.elements.1.slider.image1"); //5zw3ucypzp3qham.png
getObjectData(data, "dynamic[elements][1][slider][image1]"); //5zw3ucypzp3qham.png

希望这能有所帮助。

展示您的示例ajax响应数据。您能在字段上放置一个
id
吗?我不能在字段上放置id。将更新一个ajax响应示例,感谢您的贡献。看来这和我想达到的目标正好相反。。我想传递dynamic[elements][1][slider][image1]以获取数据对象中dynamic.elements.1.slider.image1的值。希望你能理解@Karem你可以简单地用点替换括号。我的最新答案说明了一种方法。
function getObjectData(target, path) {

     // if the path is not in dot notation first convert 
     if (path.indexOf(".") == -1)
        path = path.replace(/\[/g, ".").replace(/\]/g, "");

    var parts = path.split(".");
    return parts.reduce(function (acc, currentVal) {
        return acc ? (acc[currentVal] || undefined) : acc;
    }, target);
}

//usage
getObjectData(data, "dynamic.elements.0.slider.image1"); //undefined
getObjectData(data, "dynamic.elements.1.slider.image1"); //5zw3ucypzp3qham.png
getObjectData(data, "dynamic[elements][1][slider][image1]"); //5zw3ucypzp3qham.png