[英]Why does PHP not receive POST data sent via AJAX?
我之前在Stack Overflow和其他网站上已经看到过很多次,但是以前的帖子似乎都没有帮助。
假定以下HTML代码:
<input maxlength="50" size="50" id="searchTxt" />
并假设以下AJAX调用:
$.ajax({
type: "POST",
url: "tdat.php",
data: {userresponse: $('#searchTxt').val()},
success: function(){
$('#searchTxt').val("")
}
})
应该发生的是,数据“用户响应”被发布到服务器,并具有输入框内任何值,然后清空该框中的输入。
稍后,我在tdat.php中具有以下PHP代码:
<?php
if(isset($_POST['userresponse'])){
$userResponsePHP = $_POST['userresponse'];
switch($userResponsePHP){
case "yes":
echo "alert(\"hi\")";
break;
case "no":
echo "alert(\"negative!\")";
break;
default:
echo "alert(\"nope.\")";
break;
}
}
?>
即使AJAX调用工作正常,PHP也不会响应。 PHP甚至没有收到“ userresponse”的值。 我已经检查了文件路径,本地主机连接,在“用户响应”中添加了引号,以及其他线程中所述的几乎所有其他次要问题,但是问题仍然存在。 AJAX调用清除searchTxt的值,因此发送成功。 控制台中未显示任何错误 。 为什么会这样呢?
请尝试以下操作:
$.ajax({
type: "POST",
url: "tdat.php",
data: {userresponse: $('#searchTxt').val()},
success: function(data){
alert(data.message);
$('#searchTxt').val("");
}
})
PHP:
<?php
header('Content-Type: application/json');
if(isset($_POST['userresponse'])){
$userResponsePHP = $_POST['userresponse'];
switch($userResponsePHP){
case "yes":
echo json_encode(["message"=>"hi"]);
break;
case "no":
echo json_encode(["message"=>"negative"]);
break;
default:
echo json_encode(["message"=>"nope"]);
break;
}
}
?>
注意:如果页面正在刷新,则您没有做任何ajax
以下代码段有效,但是通常建议不要使用eval,因为在服务器端(在PHP中)具有JavaScript警报功能,因此在这种情况下我将使用eval。 您应该做的是回显文本,然后在Javascript端调用Alert函数。 但是,为了尽可能少地更改您的代码,我将其保留原样,仅在JavaScript中进行更改。
在此示例中需要注意的两件事:我使用您接受的值“是”初始化文本框。 当然,您可以更改此设置,以便在单击按钮时进行ajax调用(不确定您的用例是什么)
您忘记的一件事是在成功回调中读取data参数。
<script src="https://code.jquery.com/jquery-2.2.3.min.js" integrity="sha256-a23g1Nt4dtEYOj7bR+vTu7+T8VP13humZFBJNIYoEJo=" crossorigin="anonymous"></script>
<script>
$( document ).ready(function() {
$('#searchTxt').val("yes");
$.ajax({
type: "POST",
url: "tdat.php",
data: {userresponse: $('#searchTxt').val()},
success: function(data, textStatus, jqXHR) {
eval(data);
$('#searchTxt').val("")
}
})
});
</script>
<input maxlength="50" size="50" id="searchTxt" />
首先修改ajax函数,如下所示:
$('#searchTxt').change(function(){
$.ajax({
type: "POST",
url: "tdat.php",
data: {userresponse: $('#searchTxt').val()},
success: function(res){
$('#searchTxt').val("");
console.log(res);
}
});
});
在searchTxt发生更改事件时,将执行ajax调用,然后检查控制台。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.