我目前正在为某些网站开发后台服务,并且遇到了一些文件和信息插入数据库的问题。首先,我不能以相同的格式上传文件和信息,而不必为每个其他输入声明变量,其次,不能像往常一样将声明的对象附加到上传文件格式。
我尝试附加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文件,然后进行处理并插入数据库中。
答案 0 :(得分:0)
尝试一下:
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"];
}
答案 1 :(得分: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
。