繁体   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