jquery - jQuery在提交之前将数据数组添加到表单
问题描述
我想要实现的是获取现有的表单隐藏字段,添加另一个包含数组的字段,然后将其发布到服务器,但是以旧的方式。我的意思是,在 POST 之后,页面应该像普通表单一样从服务器获取新的 HTML。
我尝试使用$.post()
,但这就像 AJAX 请求一样工作,页面不会从服务器重新加载。
我想我可以动态添加一个隐藏字段,并在提交之前用我的数组填充它的值。但是这样做可能会被浏览器截断。该数组有时会变得非常大,它是一个包含 CSV 文件数据的字段数组。所以我无法控制数组的长度。如果用户将处理 500 行 CSV,则该数组可能有大约 2000 个键值。
所以基本上我正在寻找一个像 $.post() 这样的解决方案,我可以通过传递我的数组来填充提交数据,但具有表单的真实行为。页面必须提交并完全替换为服务器响应。我发现了一些用 ajax 响应替换页面的“hacks”,但是它们太老套了,并且不能在每个浏览器中都工作。
解决方案
不太确定你在问什么。听起来像这样?后端使用 PHP,虽然这里的 extradata 是一个对象。
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<meta name="generator" content="BBEdit 13.5" />
<meta charset="utf-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
</head>
<body>
<form action="/process.php" method="post" class="form-example" name = "testform">
<div class="form-example">
<label for="name">Enter your name: </label>
<input type="text" name="name" id="name" required>
</div>
<div class="form-example">
<label for="email">Enter your email: </label>
<input type="email" name="email" id="email" required>
</div>
<div class="form-example">
<label for="hidden1">hidden1: </label>
<input type="hidden" name="hidden1" id="hidden1" value = "hidden1" required>
</div>
<div class="form-example">
<label for="hidden2">hidden2: </label>
<input type="hidden" name="hidden2" id="hidden2" value = "hidden2" required>
</div>
<div class="form-example">
<label for="hiddenarray">hiddenarray: </label>
<input type="hidden" name="hiddenarray" id="hiddenarray" required>
</div>
<div class="form-example">
<input type="submit" value="Subscribe!">
</div>
</form>
<script>
var extradata = {
"name1":"value1",
"name2":"value2",
"name3":"value3"
};
$("[name=testform]").on("submit", function(e) {
$("[name=hiddenarray]").val(JSON.stringify(extradata));
alert("test");
});
</script>
</body>
</html>
进程.php
<?php
$_POST['hiddenarray'] = json_decode($_POST['hiddenarray']);
echo json_encode($_POST);
?>
推荐阅读
- node.js - Can moduleNameMapper ignore the imports made by a module in node_modules?
- android - Android Room:应用程序突然崩溃(致命信号 11 (SIGSEGV)、代码 1 (SEGV_MAPERR)、故障地址 0x0)
- javascript - 使用 useffect 和 redux 时反应无限循环
- python - 如何修复文件名或其路径中的语法错误?
- elasticsearch - 根据数组计数过滤弹性数据
- python - 使用 keras 的 Fashion-MNIST
- html - 在html(css)中设置前一个元素的属性
- php - 使用作曲家安装 Asana
- reactjs - Semantic React UI:有没有办法改变复选框切换的背景颜色?
- javascript - hello filter() javascript problem clic metods