[英]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.