【发布时间】:2021-07-09 07:09:09
【问题描述】:
我只是通过 ajax 表单将演示数据插入数据库。当我使用console.log(response); 时,ajax 没有显示错误但显示空白响应。
php代码-
<form role="form" id="signup_form">
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="form-group">
<label class="required">First Name</label>
<div class="input-with-icon">
<input type="text" class="form-control" placeholder="Your First Name"
name="f_name" id="f_name" required>
<i class="ti-user"></i>
</div>
</div>
</div>
</div>
<div class="form-group">
<button type="submit" id="submit" name="submit"
class="btn btn-md full-width btn-theme-light-2 rounded">Sign Up</button>
</div>
</form>
ajax 代码-
<script>
$(document).ready(function() {
$("#submit").on("click", function(e) {
e.preventDefault();
var f_name = $('#f_name').val();
console.log(f_name); // <--- but this shows the typed data from the form
$.ajax({
url: "homes/php/user-signup.php",
method: "POST",
data: {
"f_name": f_name
},
success: function(response) {
$('#signup_form')[0].reset();
$('#signup').modal('hide');
console.log(response); // <--- this shows blank response
},
error: function(response) {
console.log(response);
}
});
});
});
</script>
mysql --
<?php
session_start();
include_once 'conf.php';
if(isset($_POST['submit'])){
$f_name=$_POST['f_name'];
$query = "INSERT INTO `user_info`(`first_name`) VALUES (':f_name')";
$stmt = $dbcon->prepare($query);
$stmt->bindParam(':f_name',$f_name);
$stmt->execute();
}
?>
【问题讨论】:
-
将脚本标签和 js 代码回显到 Ajax 是没有意义的。只是回显文本。如果浏览器选择这样做,浏览器上的 JavaScript 可以提醒它。 PHP 应该对消息的呈现方式保持中立。
-
@ADyson 我删除了 mysql 文件回显,但问题仍然在于 ajax
-
我没有说要移除回声……请仔细阅读。显然,如果您删除回声,您将不会在 任何 情况下得到响应。我说只回显您要显示的文本,而不是回显 javascript 代码块。
-
此外,如果查询由于任何原因失败(假设您没有启用 PDO 错误报告),那么它根本不会回显任何内容(因为您没有编写任何可以执行的代码那)。或者,如果 POST 变量设置不正确,它不会回显任何内容。因此,空响应有很多可能的原因。我假设您在询问之前没有尝试全部调试,那么?
-
正如下面的答案指出的那样,您正试图在 $_POST 变量中检测一个名为“submit”的变量,但从这里的代码中可以很清楚地看到:
data: { "f_name": f_name }您唯一的变量'正在发送的是一个名为“f_name”的人。所以这会导致你得到一个空响应的情况,因为 POST 变量没有被正确检测到。按照建议将其更改为if(isset($_POST['f_name']))。如果它仍然在那之后不起作用,那么你显然还有另一个问题 - 例如,查询可能失败。