PHP没有从AJAX接收变量

Posted

技术标签:

【中文标题】PHP没有从AJAX接收变量【英文标题】:PHP not recieveing variable from AJAX 【发布时间】:2022-01-14 07:04:27 【问题描述】:

这是我的代码:

<!DOCTYPE html>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.7.1.min.js"></script>
<html>
  <title>Login</title>
  <body>
    <p>Enter the name of your school bellow in full</p>
    <br>
    <input type="text" id="school_text" name="school_txt" onkeyup="check_school()">
    <p id="output_field">School does not exist</p>
    
    <script>
    var result = ("");
    var schoolEntry = document.getElementById("school_text").innerHTML;
    function check_school() 
        console.log("Checking if school exists");
        schoolEntry = document.getElementById("school_text").innerHTML;
        $.ajax(
            url: 'checkSchool.php',
            type: 'POST',
            dataType:'json',
            data: 'post_var':document.getElementById("school_text").innerHTML,
            success: function(data) 
                console.log(data);
                result = data;
            
        );
        document.getElementById("output_field").innerHTML = (result);
    
    </script>
  </body>
</html>

和 php 脚本

<?php
$user_input=$_POST['post_var'];
echo json_encode($user_input."1test_string");
?>

无论出于何种原因,php 都不会从 ajax 脚本接收变量。 PHP 能够将变量发送到 ajax 成功函数,并且 Apache 日志中没有错误。有人可以告诉我我没有错吗?我也担心apache也会有问题。

【问题讨论】:

你能试试这个吗:在 echo header('Content-type: application/json'); input 元素没有innerHTML - 或者至少如果有,它不包含用户输入的值。请改用value。然后回到您的 HTML 表单教程并密切关注示例......同样就您的问题而言,“不会”不是有用的错误消息或问题描述。它表明您没有做太多/任何努力来调试它。如果您将其分解并尝试遵循从捕获到发送、到 PHP、到编码、再到响应的值,您会很快注意到它在“捕获”阶段失败,原因我刚刚描述。 @GurkanAtik 在提供 JSON 响应方面更“合适”,但在这种情况下实际上并没有太大区别 - 因为 OP 已指定 dataType: "json",jQuery 将尝试解码无论如何,响应为 JSON。但这不是问题的根源——问题是数据不会被发送,原因我上面已经提到过。 一旦你解决了这个问题,其他问题是 1) document.getElementById("output_field").innerHTML = (result); 需要“成功”函数中,否则它将被执行 AJAX 调用完成之前(因为AJAX 调用是异步的),2)如果你只是想让PHP 返回一个字符串,那么使用JSON 没有什么意义。当您需要一次返回多个不同的数据时,JSON 非常有用。 【参考方案1】:

看看你已经通过 jquery Ajax 向 PHP 发送了数据。 但是在php端你不会在POST中收到数据,因为你是通过body而不是通过form-data发送的,所以每当你通过body发送数据时,你都会在php//input中得到响应

<?php
$user_input=file_get_contents("php://input");
echo json_encode($user_input["post_var"]."1test_string");
?>

请检查上面的代码,也许你会得到你需要的答案

【讨论】:

这完全不真实,表明对 HTTP 请求结构的误解。 you have sent it through the body not through form-data...这些不是可比的。 form-data 是一种数据格式。请求的主体是您在发送数据时放置数据的位置。无论您是发送表单数据、JSON、XML 还是您喜欢的任何其他内容,除非您特别将其包含在 URL 本身中,否则数据(任何格式)都会放在请求的正文中。 jQuery $.ajax 默认会自动将传递给它的数据对象序列化为表单数据格式,并将其放入.... ...你猜对了:在请求的正文中!你猜它还会去哪里?当然,如果它是一个 POST 请求(在这种情况下就是这样),PHP 会自动解析来自正文的提交的表单数据,并将其作为单独的数组项放入 $_POST(以及 $_REQUEST),每个数组项一个表单数据中的参数。 此外,cmets 中已经指出了 OP 问题的根源是什么……您在回答之前阅读了 cmets 吗?

以上是关于PHP没有从AJAX接收变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP 从 Ajax 调用接收空的 $_POST 变量

PHP文件没有从axios post接收变量

ajax 和 php:如何从数据库中选择变量并使用 ajax 插入数据库

ajax提交参数php接收不到

Jquery中post方法传值,php内无法接收到,请求各位帮助,多谢

js ajax post 提交的时候后台接收不到参数,但是代码没有错,怎么回事