Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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 即使未选中任何复选框,也要定义数组_Javascript_Jquery_Html - Fatal编程技术网

Javascript 即使未选中任何复选框,也要定义数组

Javascript 即使未选中任何复选框,也要定义数组,javascript,jquery,html,Javascript,Jquery,Html,我有以下HTML: <form id="download"> <label> <input name="docs" id="doc1" value="doc1" type="checkbox">File 1 </label> <label> <input name="docs" id="doc2" value="doc2" type="checkbox">File 2 &l

我有以下HTML:

<form id="download">
  <label>
    <input name="docs" id="doc1" value="doc1" type="checkbox">File 1
  </label>          
  <label>
    <input name="docs" id="doc2" value="doc2" type="checkbox">File 2
  </label>          
  <button class="button" type="submit">Download</button>            
</form>
当我选中这两个复选框时,控制台上会显示以下内容:

Object { names: [ "doc1", "doc2" ] }
如果我只选择一个复选框,我会得到:

Object { names: "doc1" }
我需要“名称”始终是一个数组,因为后端需要它

因此,如果我只选择一个,我将得到:

Object { names: [ "doc1" ] }
或者如果我没有选择任何复选框,则:

Object { names: [] }

解决此问题的最佳方法是什么?

只需在代码中添加一个复选框:

formData = $form.serializeToJSON()
if (!formData.docs) {
    formData.docs = [];
} else if (typeof formData.docs == "string") {
    formData.docs = [formData.docs];
}
$.ajax({
  url: "/download",
  data: JSON.stringify(formData),
  dataType: "json",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json"
  },
  type: "post"
})
.done(function (data, status, xhr) { })
.fail(function (xhr, status, error) { });

自定义配置可能是您在这里的最佳选择。所以我应该检查是否没有定义文档,或者是否只有一个项目?如何检查序列化之前是否只选择了一项?我认为Barmar的回答涵盖了这一点。您的代码只考虑没有选中复选框的情况。但当只有一个数组时,我还需要一个数组,它以字符串的形式发送。检查我的初始问题:对象{names:“doc1”}尝试对表单字段使用数组样式名称:
name=“docs[]”
OK,然后只需添加一个字符串检查并将其更改为数组即可。我已经更新了code.BTW,您不需要
Accept:application/json
。当您使用
数据类型:“json”
时,jQuery会自动执行此操作。
formData = $form.serializeToJSON()
if (!formData.docs) {
    formData.docs = [];
} else if (typeof formData.docs == "string") {
    formData.docs = [formData.docs];
}
$.ajax({
  url: "/download",
  data: JSON.stringify(formData),
  dataType: "json",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json"
  },
  type: "post"
})
.done(function (data, status, xhr) { })
.fail(function (xhr, status, error) { });