小编DCH*_*DCH的帖子

formData 和“选择多个”

我正在尝试提交一个动态生成的表单,其中包括文件上传。为此,我通过数据库连接获取表单字段。一个字段可以允许多个选定选项。该表格可能看起来像这样:

<form>
<input type="text" name="xyz"> </input>
<input type="file" name="xyzfile"> </input>
<select multiple name="...">
<option value="...">1</option>
<option value="...">2</option>
...
<option>x</option>
</select>
<select name="...">
<option value="...">1</option>
<option value="...">2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我使用 formData-Object 提交表单时,仅传输给定字段的最后选择的选项。“multiple”属性在某种程度上被忽略了。

这是我的代码:

var pId = '1';
metaForm = $('#metaForm')[0];
formData = new FormData(metaForm);
formData.append('a','saveInstance');
          formData.append('pId', pId);
$.ajax({
                  type: 'POST',
                  url: 'x.php',
                  contentType: false,
                  processData: false,
                  data: formData,

                  success: function (response) {
...
Run Code Online (Sandbox Code Playgroud)

当我检查元表单对象时,选择的所有条目都具有 selected = true 属性。使用 formData 构造函数时,是否有一个选项我没有看到获取一个选择字段的所有选定条目?我必须使用 formData.append() 手动执行此操作吗?如果是这样,如何确保在使用构造函数和append()时不会得到任何重复项?

这有点令人困惑。

html javascript forms ajax jquery

6
推荐指数
1
解决办法
1万
查看次数

JS文件上传:检测编码

因此,我尝试在前端使用 AngularJS,在后端使用 NodeJS 编写一个 CSV 文件导入器。我的问题是,我不确定传入 CSV 文件的编码。有没有办法自动检测呢?

我首先尝试使用 FileReader.readAsDataURL() 并在 Node 中进行检测。但文件内容将是 Base64 编码的,所以我不能这样做(当我解码文件时,我已经需要知道编码)。如果我执行 FileReader.readAsText(),我还需要事先知道编码。我也无法在初始化 FileReader 之前执行此操作,因为实际的文件对象似乎不包含文件内容。

我当前的代码:

generateFile = function(file){
    reader = new FileReader();
    reader.onload = function (evt) {
        if (checkSize(file.size) && isTypeValid(file.type)) {
            scope.$apply(function () {
                scope.file = evt.target.result;
                file.encoding = Encoding.detect(scope.file);
                if (angular.isString(scope.fileName)) {
                    return scope.fileName = name;
                }
            });
            if (form) {
                form.$setDirty();
            }
            scope.fileArray.push({
                name: file.name,
                type: file.type,
                size: file.size,
                date: file.lastModified,
                encoding: file.encoding,
                file: scope.file
            });
            --scope.pending;
            if (scope.pending === 0){
                scope.$emit('file-dropzone-drop-event', scope.fileArray); …
Run Code Online (Sandbox Code Playgroud)

javascript csv character-encoding node.js

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

javascript ×2

ajax ×1

character-encoding ×1

csv ×1

forms ×1

html ×1

jquery ×1

node.js ×1