0

我目前正在为某些网站开发后台办公室,并且在将文件和信息插入数据库时​​遇到了一些问题。首先,我不能以相同的形式上传文件和信息,而不必为每个其他输入声明一个变量,其次不能像往常一样将声明的对象附加到上传文件表单。

我尝试附加 as 和 object,但一些输入得到未定义的索引。

这是我尝试将对象附加到 formData() 的代码:

$(document).ready(function() {
 $('#addinfo-form').submit(function(e) {
  var info = {
   'name':$('#name').val(),
   'email':$('#email').val(),
   'country':$('#country :selected').val()
  }
  var file = $('#file').prop('files')[0];
  var new_info = new formData();
  new_info.append('info', info);
  new_info.append('file', file;
  $.ajax({
   type:'POST',
   url:'add-info.php',
   data:new_info,
   dataType:'json',
   processData:false,
   contentType:false,
   encode:true,
  }
  .done(function(data) {
  })
  .fail(function(data) {
  });
  e.preventDefault();
 });
});

预期结果应通过 json 将信息发送到 php 文件,然后处理并插入数据库。

4

2 回答 2

1

尝试这个:

var info = {
    'name': $('#name').val(),
    'email': $('#email').val(),
    'country': $('#country').val()
};

var file = $('#file').prop('files')[0];
var new_info = new FormData();
new_info.append("file", file, file.name);
new_info.append("info", JSON.stringify(info));

$.ajax({
type:'POST',
        url:'add-info.php',
        data:new_info,
        dataType:'json',
        processData:false,
        contentType:false,
        encode:true,
 /*....*/

在你的 add-info.php

if (isset($_POST['info'])) {
    $info = json_decode($_POST['info'], true);
    echo $info["name"];
    echo $info["email"];
    echo $info["country"];
}
于 2019-08-27T19:38:14.537 回答
0

或者,您可以使用Object.entries()这样您的代码现在变成...

$(document).ready(function() {
 $('#addinfo-form').submit(function(e) {
  var file = $('#file').prop('files')[0];
  var info = {
   'name':$('#name').val(),
   'email':$('#email').val(),
   'country':$('#country :selected').val(),
   'file': file
  }
  var new_info = new formData();
  Object.entries(info).forEach(([key, value]) => {
    new_info.append(key, value);
  });
  $.ajax({
   type:'POST',
   url:'add-info.php',
   data:new_info,
   dataType:'json',
   processData:false,
   contentType:false,
   encode:true,
  }
  .done(function(data) {
  })
  .fail(function(data) {
  });
  e.preventDefault();
 });
});

您首先获取文件,将其作为属性添加到您的info对象并将其解析为formData.

于 2020-08-21T07:33:55.587 回答