Ajax+PHP构建的表格无法在指定div中显示问题求助
问题排查与解决方案
嘿,我看到你遇到的问题了——控制台能返回正确的表格HTML,但就是没法显示在目标div里,咱们一步步来拆解问题:
1. 最关键的错误:选择器不匹配
你的div的id是live-data(用的是短横杠),但Ajax代码里写的是$('#live_data')(用的是下划线),这就导致jQuery找不到对应的元素,自然没法把HTML插进去!
修正后的Ajax代码:
$(document).ready( function() { function fetch_data() { $.ajax({ url:"fetch.php", method:"POST", // 如果需要传递level_id,这里可以加上data参数,比如: // data: {level_id: 你的层级ID值}, success:function(data){ $('#live-data').html(data); // 把下划线改成短横杠 } }); } fetch_data(); });
2. fetch.php里的语法错误:嵌套PHP标签
你在拼接$output字符串的时候,错误地在PHP代码里又嵌套了<?php echo ?>标签(比如data-target="#<?php echo $stud_id ?>"),这是完全没必要的,而且会导致输出的HTML里带有这些无效的PHP标签,影响渲染。你应该直接从$row数组里读取数据库返回的值。
另外还要注意:$level_id变量在你的fetch.php里没有定义,这会导致SQL查询出错(除非你在其他地方已经全局定义了它),最好通过Ajax传递这个参数并在PHP里安全接收,同时要注意SQL注入的问题。
修正后的fetch.php核心代码:
<?php include('../global/db.php'); // 安全接收level_id(如果是从Ajax传递过来的) $level_id = mysqli_real_escape_string($db, $_POST['level_id'] ?? ''); $output = ''; $sql ="SELECT * FROM students WHERE status = '0' AND stud_grade = '$level_id' ORDER BY date_enrolled DESC"; $result = mysqli_query($db, $sql); $output .= ' <div class="table-responsive"> <table class="table table-bordered table-striped table-hover dataTable js-exportable"> <thead> <tr> <th width="135" class="noExport">Action</th> <th width="90">LRN</th> <th width="20">Level</th> <th>Name</th> <th width="20">Gender</th> <th width="60">Type</th> <th width="105" style="font-size: 14px!important;">Date Enrolled</th> </tr> </thead> <tbody>'; if(mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_array($result)){ // 直接用$row数组里的字段,不再嵌套PHP标签 $output .= ' <tr> <td> <button type="button" class="btn bg-cyan btn-xs waves-effect" data-toggle="modal" data-target="#' . $row['stud_id'] . '"> <i class="material-icons">search</i> <span>Profile</span> </button> <button type="button" class="btn bg-orange btn-xs waves-effect" data-toggle="modal" data-target="#' . $row['stud_id'] . $row['stud_id'] . '"> <i class="material-icons">person</i> <span>Parent</span> </button> </td> <td>' . $row['stud_lrn'] . '</td> <td>' . $row['stud_grade'] . '</td> <td>' . $row['stud_lname'] . ', ' . $row['stud_fname'] . ' ' . $row['stud_mname'] . '</td> <td>' . $row['stud_gender'] . '</td> <td>' . $row['stud_type'] . '</td> <td style="font-size: 12px!important;">' . date("M-d-Y g:i A", strtotime($row['date_enrolled'])) . '</td> </tr> '; } } else { $output .= ' <tr> <td colspan="7">Data not Found</td> <!-- 这里colspan要和列数匹配,你有7列,所以改成7 --> </tr>'; } $output .= ' </tbody> </table> </div>'; echo $output; ?>
3. 额外注意点
- 确保
level_id正确传递:如果你的$level_id是来自前端页面的某个值,记得在Ajax的data参数里把它传过去,比如上面Ajax代码注释里的写法。 - SQL注入防护:用
mysqli_real_escape_string处理用户输入的变量,或者更好的方式是使用预处理语句,这能有效防止SQL注入攻击。
先把这几个问题修正,应该就能正常显示表格了!
内容的提问来源于stack exchange,提问作者Nytraxaqw
相关产品推荐
相关产品推荐

