Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在表单提交时将javascript变量发布到JSON_Javascript_Json_Forms_Input_Hidden - Fatal编程技术网

在表单提交时将javascript变量发布到JSON

在表单提交时将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

我需要将数字格式传递给JSON,我不能使用input type HINDED,因为它返回字符串。我有
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);