在表单提交时将javascript变量发布到JSON
我需要将数字格式传递给JSON,我不能使用input type HINDED,因为它返回字符串。我有在表单提交时将javascript变量发布到JSON,javascript,json,forms,input,hidden,Javascript,Json,Forms,Input,Hidden,我需要将数字格式传递给JSON,我不能使用input type HINDED,因为它返回字符串。我有const formDataJsonString=JSON.stringify(plainFormData)将表单数据转换为JSON(见下文) 如何使用下面添加的函数将javascript变量从表单发布到JSON中 我写这篇文章是为了将它转换成数字,但是对于如何将javascript变量提交给JSON没有任何线索 <input type="hidden" class=&q
const formDataJsonString=JSON.stringify(plainFormData)代码>将表单数据转换为JSON(见下文)
如何使用下面添加的函数将javascript变量从表单发布到JSON中
我写这篇文章是为了将它转换成数字,但是对于如何将javascript变量提交给JSON没有任何线索
<input type="hidden" class="number" name="applicationType" value=3>
$("#form").submit(function(){
var formInfo = document.forms['form'];
var applicationType = parseInt($(".number").val());
});
而不是:
applicationType: "3"
更新1:
因此,我将其转换为JSON,然后发布:
//url is the api
async function postFormDataAsJson({ url, formData }) {
const plainFormData = Object.fromEntries(formData.entries());
//put all accountsToLink value into an array
plainFormData["accountsToLink"] = new Array //create array
$("input[name=accountsToLink] ").each(function() {
plainFormData["accountsToLink"].push($(this).val()) //push value in array
});
const formDataJsonString = JSON.stringify(plainFormData);
const fetchOptions = {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: formDataJsonString,
};
const response = await fetch(url, fetchOptions);
if (!response.ok) {
const errorMessage = await response.text();
throw new Error(errorMessage);
}
else if (response.ok) {
window.location.href = "confirmation.html";
}
return response.json();
}
async function handleFormSubmit(event) {
event.preventDefault();
const form = event.currentTarget;
const url = form.action;
try {
const formData = new FormData(form);
const responseData = await postFormDataAsJson({ url, formData });
console.log({ responseData });
} catch (error) {
console.error(error);
}
}
const testform = document.getElementById('testform');
testform.addEventListener('submit', handleFormSubmit);
所以你没有提到你没有做你在最初的帖子中做的事情,而是使用formData
不能将formData用于JSON整数
您可以映射序列化数组并将其字符串化
异步函数postFormDataAsJson({url,formData}){
const formDataJsonString=JSON.stringify(formData);
log(url,formDataJsonString)
// ....
}
异步函数handleFormSubmit(事件){
event.preventDefault();
const form=event.currentTarget;
const url=form.action;
试一试{
const formData=$(form).serializeArray().map(
item=>({[item.name]:isNaN(item.value)?item.value:+item.value})
);
const responseData=await postFormDataAsJson({url,formData});
}捕获(错误){
控制台错误(error);
}
}
美元(“#测试表格”)。在(“提交”,handleFormSubmit)代码>
根据您向我们展示的代码,数字不太可能变成字符串。我想您可能误解了我的意思。因为输入类型hidden给了我applicationType:“3”。我正在处理不完整的jquery,以将其转换为数字,并希望将jquery中的变量发布为隐藏输入类型的普通表单。我只看到您提供的代码applicationType=parseInt($(“.number”).val()
使用这些代码,你就有了一个数字——当你使用JSON时也是如此。请按照我在回答中的说明将其字符串化。请显示将其转换为JSON的代码。好吧,我已经更新了我的问题,请看一看。您好,是的,我编写的函数确实返回了数字,这是我想要的。但是我如何像正常表单那样提交它呢输入类型隐藏。如果我不够清楚,请告诉我。谢谢!感谢您的回答,并对误解表示歉意。您的方法似乎有效。但通过查看json,所有隐藏的输入类型(值为数字)似乎都变成了数字,甚至没有转换它们。我能问一下我的“异步函数”会发生什么情况吗tFormDataAsJson({url,formData})?我对将此函数设置为与您提供的serializeArray一起使用感到困惑。非常感谢!您切掉了它。我的serialisedForm将在第二个函数中替换您的formData:const serialisedForm=$(form).serializeArray().map(item=>({[item.name]:isNaN(item.value)?.value:+item.value}));const responseData=await postFormDataAsJson({url,serialisedForm})+项中的一元加号。value
将任何非isNaN的值转换为数字。谢谢你提供的信息。切碎的意思是删除它?很抱歉,因为我是初学者,所以我不知道如何修改第一个函数以使它们适合。你能帮我更新它吗?谢谢!
//url is the api
async function postFormDataAsJson({ url, formData }) {
const plainFormData = Object.fromEntries(formData.entries());
//put all accountsToLink value into an array
plainFormData["accountsToLink"] = new Array //create array
$("input[name=accountsToLink] ").each(function() {
plainFormData["accountsToLink"].push($(this).val()) //push value in array
});
const formDataJsonString = JSON.stringify(plainFormData);
const fetchOptions = {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: formDataJsonString,
};
const response = await fetch(url, fetchOptions);
if (!response.ok) {
const errorMessage = await response.text();
throw new Error(errorMessage);
}
else if (response.ok) {
window.location.href = "confirmation.html";
}
return response.json();
}
async function handleFormSubmit(event) {
event.preventDefault();
const form = event.currentTarget;
const url = form.action;
try {
const formData = new FormData(form);
const responseData = await postFormDataAsJson({ url, formData });
console.log({ responseData });
} catch (error) {
console.error(error);
}
}
const testform = document.getElementById('testform');
testform.addEventListener('submit', handleFormSubmit);