javascript - 如何在不重定向的情况下获取 PHP 脚本?
问题描述
编辑:我已经解决了重定向问题和错误;但是,现在当我提交表单数据时,它是未定义的。我已更新提供的代码以反映更改。
我有一个执行查询并回显一些 HTML 标记的 PHP 脚本。我正在尝试使用 javascript 来获取标记并更新 DOM 而不会触发重定向。
这可能吗?
TypeError
尝试操作 DOM 时也会遇到问题。对此相当陌生,所以不太确定我哪里出错了。
对于TypeError
,我尝试使用 DOMContentLoaded 但这会破坏我的表单输入字段。为简洁起见,提供的代码进行了简化。
PHP 脚本:
<?php
if(!include('../connect.php')){
die('error retrieving connect.php');
}
try {
$dbh = ConnectDB();
if(isset($_POST['startDate'], $_POST['endDate'])){
$startDate = $_POST['startDate'];
$endDate = $_POST['endDate'];
echo '<table><tr><th>' .$startDate. '</th>' . '<th>' .$endDate. '</th></tr></table>';
}
} catch (Exception $e){
die($e);
}
?>
HTML 代码:
<div id="desktopMetrics" style="display: none">
<form method="post" action="api/get_desktop_metrics.php" name="desktopMetricsForm" id="desktopMetricsForm">
<div class="form-row justify-content-center">
<div class="col">
<div class="form-group">
<label class="form-label" for="start">Start date:</label>
<input class="form-control" type="date" id="startDate" name="startDate" placeholder="yyyy-mm-dd" value="<?php echo date('Y-m-d')?>" >
</div>
</div>
<div class="col">
<div class="form-group">
<label class="form-label" for="end">End date:</label>
<input class="form-control" type="date" id="endDate" name="endDate" placeholder="yyyy-mm-dd" value="<?php echo date('Y-m-d')?>" >
</div>
</div>
<div class="col">
<input class="btn btn-success" type="submit" value="Submit">
</div>
</div>
</form>
<div class="col" id="desktopMetricsTable"></div>
</div>
Javascript代码:
$(document).ready(function () {
const desktopMetricsForm = document.getElementById("desktopMetricsForm");
desktopMetricsForm.addEventListener('submit', function (event) {
event.preventDefault();
const formattedFormData = new FormData(desktopMetricsForm);
desktopMetricsPostData(formattedFormData);
})
})
async function desktopMetricsPostData() {
const response = await fetch('api/get_desktop_metrics.php', {
method: 'GET',
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: formattedFormData
});
const data = await response.text();
document.getElementById("desktopMetricsTable").innerHTML = data;
}
我希望在提交时,标记将被提取并插入到innerHTML
带有id="desktopMetricsTable"
. 目前,标记已被提取,但在新页面上以纯文本显示。
解决方案
该功能应在“提交”事件而不是“点击”事件下执行
const desktopMetricsForm = document.getElementById("desktopMetricsForm");
desktopMetricsForm.addEventListener('submit', function (event) {
const formattedFormData = new FormData(form);
desktopMetricsPostData(formattedFormData);
return false;
})
async function desktopMetricsPostData() {
const response = await fetch('api/get_desktop_metrics.php', {
method: 'GET',
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: formattedFormData
});
const data = await response.text();
document.getElementById("desktopMetricsTable").innerHTML = data;
}
推荐阅读
- r - 从模型输出中收集信息的简单方法
- excel - 使用 VBA 将数据从关闭的工作簿导入现有工作表?
- c# - 在 dot net core 应用程序中执行 Startup.cs 之前,如何确保我的服务已注册?
- regression - 在多个时间序列一个数据集中使用 python 可视化自相关
- javascript - 普通 DOM 淡出然后立即淡入
- java - 如何将 ArrayList 写入 Android App 中的文本文件
- c# - ASP.NET - 由于按钮回发,无法在 GridView 上保存更改
- amazon-web-services - AWS API Gateway 私有 API 自定义域名
- parquet - 在数据块中创建具有限定名称的镶木地板文件
- ios - System.Data 在 iOS Unity Build 上抛出 NotSupportedException