为什么PHP不接收通过AJAX发送的POST数据?

时间:2016-05-10 04:15:22

标签: php jquery 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("")
    }
})

应该发生的是数据“userresponse”被发布到服务器,具有输入框内的任何值,然后清空框中的输入。

稍后,我在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”的值。我检查了文件路径,localhost连接,向“userresponse”添加引号,以及其他线程中陈述的几乎所有其他小问题,但问题仍然存在。 AJAX调用清除了searchTxt的值,因此它是一个成功的发送。控制台中未显示任何错误。为什么会这样?

3 个答案:

答案 0 :(得分:2)

尝试以下方法:

$.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

答案 1 :(得分:0)

以下代码片段有效,但通常建议不要使用eval我在这种情况下使用eval,因为您在服务器端(在PHP中)具有JavaScript警报功能。你应该做的是回显文本,然后在Javascript端调用alert函数。但是,为了尽可能少地改变您的代码,我将其保留原样并且仅在JavaScript中进行更改。

在此示例中需要注意的两件事情我使用您接受的值“是”初始化文本框。当然你可以更改这个,所以ajax调用就是按一下按钮(不确定你的用例是什么)

您忘记的一件小事是阅读成功回调中的数据参数。

<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" />

答案 2 :(得分:0)

首先修改 ajax 函数,如下所示:

$('#searchTxt').change(function(){
    $.ajax({
        type: "POST",
        url: "tdat.php",
        data: {userresponse: $('#searchTxt').val()},
        success: function(res){
            $('#searchTxt').val("");
            console.log(res);
        }
     });
 });

searchTxt 的更改事件中,您的ajax调用将被执行,然后检查控制台。