PHP插入数据前调用JavaScript alert失败,echo无作用如何解决?
解决AJAX请求后PHP返回的alert脚本不触发的问题
嘿,我明白你遇到的头疼问题了——用jQuery的$.get发异步请求到PHP接口,后端echo的alert脚本死活弹不出来,对吧?这其实是AJAX请求的特性导致的,我来给你拆解原因和解决办法:
为什么原来的代码不生效?
当你用$.get发起AJAX请求时,服务器返回的内容(包括你echo的<script>标签)是直接传递给前端JS代码的,不会自动被浏览器解析执行。浏览器只会自动运行页面初始加载时存在的脚本,AJAX返回的脚本必须通过JS手动处理才会触发。而且你的前端已经在done回调里写了成功提示,后端的脚本根本没机会被执行。
方案1:用JSON返回状态(推荐,前后端解耦)
这是更规范的做法,后端只返回数据状态,前端根据状态显示提示:
修改tute7_add.php:
<?php // 先处理数据库操作(注意:一定要修复SQL注入风险!) $code = $_GET['unit_code']; $name = $_GET['unit_name']; $lecturer = $_GET['lecturer']; $semester = $_GET['semester']; // 改用预处理语句防止SQL注入(非常重要!) $stmt = $mysqli->prepare("INSERT INTO units (`unit_code`,`unit_name`,`lecturer`,`semester`) VALUES (?,?,?,?)"); $stmt->bind_param("ssss", $code, $name, $lecturer, $semester); $stmt->execute(); // 判断插入是否成功,返回JSON格式的结果 if ($stmt->affected_rows > 0) { echo json_encode(['status' => 'success', 'message' => 'You have added a unit successfully!']); } else { echo json_encode(['status' => 'error', 'message' => "Don't have a record"]); } $stmt->close(); ?>
修改前端JavaScript:
$.get("tute7_add.php", { unit_code: unit_code, unit_name: unit_name, lecturer: lecturer, semester: semester }) .done(function(data) { // 解析后端返回的JSON数据 const response = JSON.parse(data); // 根据状态显示对应的提示 alert(response.message); }) .fail(function() { // 请求失败时的提示 alert("Oops, something went wrong with the request!"); });
方案2:手动执行后端返回的脚本(不推荐,耦合性高)
如果你非要让后端返回脚本并执行,可以在前端的done回调里把返回的内容插入到页面中:
$.get("tute7_add.php", { unit_code: unit_code, unit_name: unit_name, lecturer: lecturer, semester: semester }) .done(function(data) { // 将返回的脚本插入到页面body中,浏览器会自动执行 $("body").append(data); });
重要提醒:SQL注入风险
你现在的代码直接把$_GET参数拼到SQL语句里,这是非常危险的,很容易被黑客利用进行SQL注入攻击。上面的方案1里我已经用了mysqli的预处理语句,一定要替换成这种写法,避免安全问题。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

