Javascript FormData附加嵌套对象 <pre><? print_r($_GET) ?></pre> <pre><? print_r($_POST) ?></pre>
是否可以将嵌套对象附加到Javascript FormData附加嵌套对象 <pre><? print_r($_GET) ?></pre> <pre><? print_r($_POST) ?></pre>,javascript,jquery,json,node.js,form-data,Javascript,Jquery,Json,Node.js,Form Data,是否可以将嵌套对象附加到FormData let formData = new FormData(); let data = { title: 'title', text: 'text', preview: {p_title:'p title', p_text: 'p text'} }; $.each(data, function(key, value) { formData.append(key, value); }); <pre><? p
FormData
let formData = new FormData();
let data = {
title: 'title',
text: 'text',
preview: {p_title:'p title', p_text: 'p text'}
};
$.each(data, function(key, value) {
formData.append(key, value);
});
<pre><? print_r($_GET) ?></pre>
<pre><? print_r($_POST) ?></pre>
服务器控制台-console.log(请求正文)
如何获取
预览:{p_title:'p title',p_text:'p text'}
?表单数据
值自动转换为字符串
。您可以尝试使用
或者使用JSON.stringify(obj)
将其作为字符串
这是一个“将对象转换为FormData实例的方便JavaScript函数”,也可以作为一个简单易用的
let data = {
title: 'title',
text: 'text',
preview: {p_title:'p title', p_text: 'p text'}
};
var formData = objectToFormData(data);
要将对象附加到formData,首先需要将其字符串化,如下所示:
let objToAppend= {
key1: value1,
key2: value2,
}
let formData = new FormData();
formData.append('obj', JSON.stringify(objToAppend));
然后在服务器端,要访问它,您需要首先使用JSON.parse()
解析它。
希望有帮助
let formData = new FormData();
let data = {
title: 'title',
text: 'text',
preview: {p_title:'p title', p_text: 'p text'}
};
for(let dataKey in data) {
if(dataKey === 'preview') {
// append nested object
for (let previewKey in data[dataKey]) {
formData.append(`preview[${previewKey}]`, data[dataKey][previewKey]);
}
}
else {
formData.append(dataKey, data[dataKey]);
}
}
控制台窗体数据
for (let val of formData.entries()) {
console.log(val[0]+ ', ' + val[1]);
}
试试看。它是一个方便的JavaScript函数,可以将对象转换为FormData实例
从'object to formdata'导入{objectToFormData};
常量对象={
/**
*键值映射
*值可以是基本体或对象
*/
};
常量选项={
/**
*在FormData键中包含数组索引
*默认为false
*/
指数:假,
/**
*将空值视为未定义的值并忽略它们
*默认为false
*/
nullsasunfineds:false,
/**
*将true或false分别转换为1或0
*默认为false
*/
布尔整数:false,
};
const formData=objectToFormData(
对象
选项,//可选
existingFormData,//可选
keyPrefix,//可选
);
console.log(formData)代码>这是我要做的工作:
使用
分隔键和子键
let formData = new FormData();
let data = {
title: 'title',
text: 'text',
preview: {p_title:'p title', p_text: 'p text'}
};
for(let key in data) {
if(typeof(data[key]) === 'object') {
for (let subKey in data[key]) {
formData.append(`${key}.${subKey}`, data[key][subKey]);
}
}
else {
formData.append(key, data[key]);
}
}
您不需要使用任何第三方模块,JSON.stringify()。相反,您可以使用Object.entries()
阅读更多关于Object.entries()
的信息-使用hashName[keyName]
let formData = new FormData();
let data = {
title: 'title',
text: 'text',
preview: {p_title:'p title', p_text: 'p text'}
};
for(let key in data) {
if(typeof(data[key]) === 'object') {
for (let subKey in data[key]) {
formData.append('${key}[${subKey}]', data[key][subKey]);
}
}
else {
formData.append(key, data[key]);
}
}
首先,我为我的英语不好道歉
我做了一些事情来在服务器端正确地获取数据,而不是在写入控制台时。我希望你想这样做
我必须编写一个javascript函数来获取服务器端的客户端嵌套数据
为此,我编写了obj2FormData()函数。方括号似乎有效
function obj2FormData(obj, formData = new FormData()){
this.formData = formData;
this.createFormData = function(obj, subKeyStr = ''){
for(let i in obj){
let value = obj[i];
let subKeyStrTrans = subKeyStr ? subKeyStr + '[' + i + ']' : i;
if(typeof(value) === 'string' || typeof(value) === 'number'){
this.formData.append(subKeyStrTrans, value);
} else if(typeof(value) === 'object'){
this.createFormData(value, subKeyStrTrans);
}
}
}
this.createFormData(obj);
return this.formData;
}
使用Ajax发送数据时,我们将嵌套对象转换为FormData对象
let formData = obj2FormData({
name : 'Emrah',
surname : 'Tuncel',
birth: 1983,
child : {
name: 'Eylul',
surname: 'Tuncel',
toys: ['ball', 'baby']
},
color: ['red', 'yellow']
});
现在,让我们发送用ajax转换的FormData
const xhr = new XMLHttpRequest();
xhr.addEventListener('load', response => {
//AJAX RESPONSE >>
console.log(response);
//AJAX RESPONSE //
});
xhr.open('POST','response.php');
xhr.send(formData);
当我用PHP将数据按到屏幕上时,我得到了我想要的确切结果。方法是POST还是GET并不重要
response.php
希望它能为您的业务带来好处。添加了snippet@ShibinRaghWhy您会将其转换为Blob吗?只需将JSON作为字符串发送,就不会通过将其作为多部分二进制发送而赢得任何东西,因为它不是二进制数据。当值为文件时不起作用。您真的需要服务器端的这种结构吗?在这种情况下,您必须遍历对象并使用key[subkey]
符号,例如formData.append('preview[p_title],'p title')代码>。但除此之外,只需将其作为JSON字符串发送并解析到服务器端,通常是最简单的发送和检索方式。事实上,我在后端编码方面是新手,我的mongodb结构是嵌套的,因此我从clientside选择此结构来发送数据,我认为这是正确的方式,我认为最简单的方法是,在我发送到db@kaidoit is FormData之前,不要尝试从客户端传递嵌套结构,而只是从服务器重新构造,你们已经写过了FormDate@ustaad嘿,谢谢你提醒我。我已经更新了它。当value是一个文件时不起作用。将一个文件作为valueJSON.stringify
对我不起作用,这确实起作用了。
const xhr = new XMLHttpRequest();
xhr.addEventListener('load', response => {
//AJAX RESPONSE >>
console.log(response);
//AJAX RESPONSE //
});
xhr.open('POST','response.php');
xhr.send(formData);
<pre><? print_r($_GET) ?></pre>
<pre><? print_r($_POST) ?></pre>
Array
(
[name] => Emrah
[surname] => Tuncel
[birth] => 1983
[child] => Array
(
[name] => Eylul
[surname] => Tuncel
[toys] => Array
(
[0] => ball
[1] => baby
)
)
[color] => Array
(
[0] => red
[1] => yellow
)
)