javascript - 如何从没有 mySql(PHP、AJAX、JQuery、JS)的表单控件中修复空数组
问题描述
我正在尝试为非营利组织创建一个 PHP 表单,并希望使用 PHPMailer 通过 SMTP 发送电子邮件。我的问题是表单包含一个动态表,我想通过 Ajax 和 JSON 将数据存储/发送到 .php 文件,但它不会用值填充数组(即使我键入$(tr).find('td:eq(0)').val()
.Ajax 数据也包含两个附加值。另外,如果我尝试对下面的代码进行 json_decode,PHP 会中断。
- 我尝试通过变量获取数据,并且它有效。
- 我试图将它们收集在一个转换为 JSON 的字符串中,但它不起作用。(PHP 不发送任何内容或错误反馈)
- 现在我正在尝试从行创建多个数组。但是像2.它不起作用
HTML 正文:
<html>....
<input id="name" class="form-control" required>
<input type="email" id="email"class="form-control" required>
<table id="dynamic_field">
<tr>
<td>
<textarea id="value1" class="form-control" required></textarea></td>
<td>
<textarea id="value2" class="form-control" required></textarea></td>
.....
</tr></table>
<input type="button" onclick="sendEmail()" value="Send &arr" class="btn btn-primary">
剧本:
function sendEmail() {
var name = $("#name");
var email = $("#email");
var value1 = $("#value1");
var value2 = $("#value2");
....
var TableData;
TableData = JSON.stringify(storeTblValues());
$.ajax({
url: 'sendEmail.php',
method: 'POST',
dataType: 'json',
data: {
name: name.val(),
email: email.val(),
value1: value1.val(),
value2: value2.val(),
TableData: TableData
}, success:...
function storeTblValues(){
var TableData = new Array();
$("#dynamic_field tr").each(function (row, tr) {
TableData[row] = {"value1": $(tr).find('td:eq(0)').text() , "value2": $(tr).find('td:eq(1)').text() , ......}
;});return TableData;
;}
我希望数组的输出TableData
是[{"value1":"Whatever in Value 1","value2":"Whatever in Value 2 ",....}]
,但我从这个字符串中读取的是[{"value1":"\n ","value2":"\n ",...}]
解决方案
例子:
$('button').click(function () {
var formData = $('form').serializeArray();
console.log(formData);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input type="text" name="your-name" placeholder="name">
<textarea name="your-text" placeholder="text"></textarea>
<button type="button">Submit</button>
</form>
你也不能转换这个数组:
var searchParams = new URLSearchParams("your-name=value1&your-text=value2");
var result = {};
// Display the key/value pairs
for(var pair of searchParams.entries()) {
result[pair[0]] = pair[1]
}
console.log(result);
推荐阅读
- php - 读取动态添加的复选框值
- dialogflow-es - 如何在单个 app.intent 函数中提及多个 Intent 调用
- python - 为什么我可以通过shell连接到MySQL,但不能通过Python连接?
- apache-kafka - 为多个 Kafka 主题重用一个模式
- path - 在rviz中绘制多条路径
- node.js - 在移动设备中打开 webapp 时不会触发 SocketIO 事件
- azure - 1 个应用程序的 2 个不同 Azure AD 域
- c# - Utf8JsonReader 阻塞 UI
- java - 尝试保存到数据库时使用 Spring Boot JPA 的 NullPointerException
- reactjs - 是否可以在 React 中使用 brotli 压缩?