首页 > 解决方案 > JavaScript 将值发送到后端(隐藏的 html 输入或所有方式)

问题描述

我有两个非常简单的表格,如下所示:

<form name='a' id='a'> // form a
     <input type="text" name="x" id="x"> //input 1
     <input type="text" name="y" id="y"> //input 2
     <button>submit</button>
</form>

提交表单 a 时,URL 查询字符串将类似于 example.com/?x=1&y=2

<form name='b' id='b' method="POST"> //form b
     <input type="hidden" name="sum" id="sum"> // hidden input sum
</form>

我有一个计算脚本代码,它计算输入 1 和输入 2 的总和,然后将总和存储到“表单 b”内的隐藏“输入总和”

<script>
     window.addEventListener("DOMContentLoaded", function(){ 
        function calculate(){
             // I want it also to work when someone paste the url example.com/?x=1&y=2
             const urlParams = new URLSearchParams(window.location.search);
             x = urlParams.get('x')
             y = urlParams.get('y')
             sum = parseInt(x)+parseInt(y)
             document.getElementById('sum').value = sum //store sum to hidden input
          }
      calculate()
    });
    
</script>

当有人提交表单或粘贴 URL 时,如何将隐藏的“输入总和”的值发送到后端(Django)?

如果这样的事情可行,我更喜欢这样的事情:

if sum.value not empty:
   form_b.submit()
   form_b.prevent_page_refresh

我不知道这是否可能或如何在 js 或 ajax 中实现,如果不是,我对所有想法持开放态度。

编辑:在 def function calculate(){...} 之后的 Ajax 解决方案,并删除了第二种形式:

 $.ajax({
           type:'POST',
           url:'{% url "index"%}',
           headers: {
           'X-CSRFToken': '{{ csrf_token }}'
           },
           data:{
              sum:sum,
               },
          success: function(){}});   

标签: javascriptjquerydjangoajaxxmlhttprequest

解决方案


不确定我是否完全理解你的意思,但我认为这就是你要找的东西?

const form = document.getElementById('a');
const sumInput = document.getElementById('sum');
function calculate() {
    const urlParams = new URLSearchParams(window.location.search);
    x = urlParams.get('x');
    y = urlParams.get('y');
    const sum = parseInt(x) + parseInt(y);
    sumInput.value = sum;
    fetch('http://localhost:8000', {
        method: 'POST', 
        body: JSON.stringify({
            value: sum
        })
    });
}
window.addEventListener("DOMContentLoaded", () => {
    calculate()
});
<form name="a" id="a" onsubmit="calculate">
    <input type="text" name="x" id="x"> 
    <input type="text" name="y" id="y">
    <button>submit</button>
    <input type="hidden" name="sum" id="sum">
</form>

基本上,一个计算结果并发布的简单表格?那么,不确定隐藏输入的用途是什么。


推荐阅读