簡體   English   中英

為什么PHP無法接收通過AJAX發送的POST數據?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM