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接收变量的主要内容,如果未能解决你的问题,请参考以下文章
ajax 和 php:如何从数据库中选择变量并使用 ajax 插入数据库