php - 为什么我的 ajax 调用在 php 文件中显示输出而不是重定向到 html?
问题描述
我编写了一系列从 php 文件中获取数据的 ajax 函数。问题是其中一个函数重定向到 php 文件以获取数据,但不返回 html 页面插入数据。
在这种情况下,以下代码是从 php 文件中获取表
var display_results = $("#display_results").val();
var url3 = "../server/insert_tests.php?analyses=";
$.ajax({
type: "GET",
url: url3 + display_results,
success: function(data) {
$("#analyses").html(data);
}
});
并从文件中获取以下数据insert_tests.php
:
if (isset($_GET['analyses'])) {
require 'dbh.php';
$id = $_GET['analyses'];
$samples = "SELECT * FROM samples_database JOIN storage_database on samples_database.storage_location=storage_database.id WHERE samples_database.order_id=$id AND samples_database.micro_analysis<>'';";
$result2 = mysqli_query($conn, $samples);
$output3 = '';
if (mysqli_num_rows($result2) > 0) {
$output3 .= '
<thead>
<tr>
<th>Sample Number</th>
<th>Client ID</th>
<th>Sample</th>
<th>Storage</th>
<th>Status</th>
<th>Time Stamp</th>
<th colspan="1"></th>
</tr>
</thead>
<tbody>';
while ($row = mysqli_fetch_assoc($result2)) {
$output3 .= '
<tr>
<td>'.$row['env_sam_id'].'</td>
<td>'.$row['c_sam_id'].'</td>
<td>'.$row['sample_type'].'</td>
<td>'.$row['storage_name'].'</td>
<td>'.$row['s_status'].'</td>
<td>'.$row['s_date1'].' (<i>'.$row['s_time1'].'</i>)</td>
<td><a class="get_result edittablebtn show_submit_button" href="../server/insert_tests.php?query='.$row['sample_id'].'">Enter Results</a></td>
</tr>';
}
$output3 .= '</tbody>';
}
echo $output3;
}
这是相关的,因为我怀疑这<a class="get_result edittablebtn show_submit_button" href="../server/insert_tests.php?query='.$row['sample_id'].'">Enter Results</a>
会导致下游问题。
此函数创建的表具有不同数量的行,单击表上的按钮将显示与该行中的数据有关的信息。这是通过这个函数完成的:
$('.get_result').click(function (event) {
event.preventDefault();
var url = $(this).attr('href');
$.ajax({
url: url,
type: "GET",
success: function(data) {
$("#tests").html(data);
}
});
});
并从同一insert_tests.php
文件中获取以下数据:
if (isset($_GET['query'])) {
require 'dbh.php';
$id = $_GET['query'];
$query = "SELECT * FROM samples_database WHERE sample_id=$id;";
$result = mysqli_query($conn, $query);
$input = mysqli_fetch_array($result);
$input1 = $input['micro_analysis'];
$env_sam_id = $input['env_sam_id'];
$c_sam_id = $input['c_sam_id'];
$order_id = $input['order_id'];
$rows = explode(',', $input1);
if (count($rows) > 0 ) {
$output .= '
<thead>
<tr>
<th colspan="1"></th>
<th>Tests ('.$env_sam_id.' <i>'.$c_sam_id.'</i>)</th>
<th>Detected</th>
<th>Result</th>
</tr>
</thead>
<tbody>';
foreach ($rows as $row) {
$query2 = "SELECT * FROM microbiology_analysis_database WHERE id=$row";
$result2 = mysqli_query($conn, $query2);
$input2 = mysqli_fetch_array($result2);
$analysis = $input2['m_analysis'];
$query3 = "SELECT * FROM results_database WHERE m_analysis_id=$row AND order_id=$order_id AND sample_id=$id;";
$result3 = mysqli_query($conn, $query3);
$input3 = mysqli_fetch_array($result3);
$result_id = $input3['id'];
$result = $input3['result'];
$detected = $input3['detected'];
$output .=
'<tr>
<td>
<input class="hidden" name="result_id[]" id="result_id" value="'.$result_id.'" readonly>
<input class="hidden" name="m_analysis_id[]" id="m_analysis_id" value="'.$row.'" readonly>
<input class="hidden" name="order_id[]" id="order_id" value="'.$order_id.'" readonly>
<input class="hidden" name="sample_id[]" id="sample_id" value="'.$id.'" readonly></td>
<td>'.$analysis.'</td>
<td><input name="detected[]" class="result_input" type="text" id="detected" value="'.$detected.'"></td>
<td><input name="result[]" class="result_input" type="text" id="result" value="'.$result.'"></td>
</tr>';
}
$output .= '</tbody>';
}
echo $output;
}
问题是最后一个函数中的这个表没有返回 html 页面中的数据,而是在用于重定向的 url 中显示了一个未格式化的表 ( href="../server/insert_tests.php?query='.$row['sample_id'].'"
)。
有谁知道为什么会发生这种情况以及如何解决?
解决方案
如您所知,$('.get_result').click(function ...)
就是将括号中的函数绑定到get_result
类的所有元素的点击事件。
但是,此调用仅在调用事件绑定时应用于现有元素。在您的情况下,由于带有<a class="get_result">
标签的表是由 AJAX 加载并在. 上面的事件绑定没有应用。
简单的解决方案是在每次 AJAX 注入表后运行事件绑定。
推荐阅读
- python-3.x - 如何在 Windows 中将我的 Python 应用程序添加到“打开方式”
- python - 从 Python 中的父方法访问子的 __class__
- javascript - JavaScript Notificaiton API 在这一点上不是没用吗?
- python - Pandas Pivot Table:按条件过滤时出错
- python - SkyCoord 错误:“列表”(或“系列”)对象没有属性“SkyCoord” - 在 for 循环中查询星星时
- slack-api - Slack API - 将用户添加到频道
- python - sklearn 随机森林获得训练偏差
- c# - 在所有扩展程序处于活动状态的情况下运行 Chrome 隐身模式
- javascript - 如何限制interact.js中的拖动元素
- ruby-on-rails - 哈希覆盖值