Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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 二维数组上的node.js服务器错误_Javascript_Html_Arrays_Node.js - Fatal编程技术网

Javascript 二维数组上的node.js服务器错误

Javascript 二维数组上的node.js服务器错误,javascript,html,arrays,node.js,Javascript,Html,Arrays,Node.js,我试图在node.js中提交带有二维数组字段的表单。但它并没有在服务器端提供正确的数组。我收到一个包含所有值的一维数组 这是表格 <form method="post" action="/add"> <div id="row1"> <input name="type[][serial]" type="text"> <input name="type[][desc]" type="text"> <select name=

我试图在node.js中提交带有二维数组字段的表单。但它并没有在服务器端提供正确的数组。我收到一个包含所有值的一维数组

这是表格

<form method="post" action="/add">
<div id="row1">
    <input name="type[][serial]" type="text">
    <input name="type[][desc]" type="text">
    <select name="type[][name]">
        <option value="VAL1">VAL1</option>
        <option value="VAL2">VAL2</option>
        <option value="VAL3">VAL3</option>
    </select>
    <input name="type[][maker]" type="text">
</div>
<div id="row2">
    <input name="type[][serial]" type="text">
    <input name="type[][desc]" type="text">
    <select name="type[][name]">
        <option value="VAL1">VAL1</option>
        <option value="VAL2">VAL2</option>
        <option value="VAL3">VAL3</option>
    </select>
    <input name="type[][maker]" type="text">
</div>
<input type="submit" value="Submit">
</form>
当我尝试像这样访问数组的值时

var hd =  req.body.type;
var serial =  hd[0]['serial'];
然后我得到未定义的错误值

我该如何解决这个问题?

这对我来说很有效:

var app = require('express')();

app.use(require('body-parser').urlencoded({ extended: true }));

app.get('/', function(req, res) {
  res.send('<form method="post" action="/add">\
    <div id="row1">\
        <input name="type[][serial]" type="text">\
        <input name="type[][desc]" type="text">\
        <select name="type[][name]">\
            <option value="VAL1">VAL1</option>\
            <option value="VAL2">VAL2</option>\
            <option value="VAL3">VAL3</option>\
        </select>\
        <input name="type[][maker]" type="text">\
    </div>\
    <div id="row2">\
        <input name="type[][serial]" type="text">\
        <input name="type[][desc]" type="text">\
        <select name="type[][name]">\
            <option value="VAL1">VAL1</option>\
            <option value="VAL2">VAL2</option>\
            <option value="VAL3">VAL3</option>\
        </select>\
        <input name="type[][maker]" type="text">\
    </div>\
    <input type="submit" value="Submit">\
    </form>\
  ');
});

app.post('/add', function(req, res) {
  res.json(req.body.type[0]['serial']);
});

app.listen(9000);

然后在按下Submit键后,类似的内容会显示在浏览器中:[asdf,fdsa]

代码中没有问题。我访问和分析值不正确。

在哪个版本上尝试此操作?节点v0.10.31和主体解析器v1.0.0的我的版本。我仍然无法获取data.node v0.10.30和全新的npm安装express body parser,因此在撰写本文时,这意味着express 4.9.8和body parser 1.9.0。body parser中存在一个问题,我刚刚更新了它,现在它给出了这个输出。[{name:[LCD,主板],serial:[12345D,12345D],desc:[19\,.77],maker:[Hp,DELL]}]但是我想要这种输出[{serial:12345D,name:LCD,desc:.77,maker:Hp},{serial:12345D,name:LCD,desc:.77,maker:Hp}]我怎么能得到这样的输出呢?我认为没有任何智能的方法可以使用您当前使用的语法得到这样的输出。您必须指定索引,以便解析器知道如何正确地将属性分配给任意对象,比如第一行中的类型[0][serial],第二行中的类型[1][serial],等等。现在我编写jquery函数来实现这一点。感谢“$div.row.eachfunctioni{$this.find'input[name=type[][name]]'。attr'name','type['+i+'][name]';$this.find'input[name=type[][serial]'。attr'name','type['+i+']][serial]';$this.find'input[name=type[][desc desc desc name]'。attr'name','type['+i+][desc desc desc name]';$this.find'input[name]][maker]'.attr'name',type['+i+'][maker]';};'
var app = require('express')();

app.use(require('body-parser').urlencoded({ extended: true }));

app.get('/', function(req, res) {
  res.send('<form method="post" action="/add">\
    <div id="row1">\
        <input name="type[][serial]" type="text">\
        <input name="type[][desc]" type="text">\
        <select name="type[][name]">\
            <option value="VAL1">VAL1</option>\
            <option value="VAL2">VAL2</option>\
            <option value="VAL3">VAL3</option>\
        </select>\
        <input name="type[][maker]" type="text">\
    </div>\
    <div id="row2">\
        <input name="type[][serial]" type="text">\
        <input name="type[][desc]" type="text">\
        <select name="type[][name]">\
            <option value="VAL1">VAL1</option>\
            <option value="VAL2">VAL2</option>\
            <option value="VAL3">VAL3</option>\
        </select>\
        <input name="type[][maker]" type="text">\
    </div>\
    <input type="submit" value="Submit">\
    </form>\
  ');
});

app.post('/add', function(req, res) {
  res.json(req.body.type[0]['serial']);
});

app.listen(9000);