我正在尝试通过POST将所选考试的JSON发送到take_exam.php页面,以便take_exam.php可以为学生显示测试。
exams.php文件包含考试列表。学生可以选择要参加的考试。我目前正在将{action:“ get_exam”,考试:“ exam_name”}的JSON发送到take_exam.php,以便它可以为学生显示考试。
用于将帖子数据发送到take_exam.php的JavaScript代码
var btns =document.getElementsByClassName("stu-take-test")
for (var i =0; i < btns.length; i++){
btns[i].addEventListener("click", function(){
var obj = new Object;
obj.action = "get_exam";
obj.exam = this.id;
str_json = JSON.stringify(obj);
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
location.replace("take_exam.php")
}
};
xhttp.open("POST", "take_exam.php", true);
xhttp.setRequestHeader("Content-type", "application/json");
xhttp.send(str_json);
});
}
take_exam.php 的PHP代码以获取通过ajax发送的JSON,仅出于测试目的,我试图打印收到的JSON。将来,该文件将与数据库通信,以为学生加载测试。但是看起来该文件什么也没收到:
<?php
$real_json = file_get_contents('php://input');
$decoded_json = json_decode($real_json);
print_r($decoded_json);
Ajax用take_test.php替换了exam.php,以便学生参加所选的考试
答案 0 :(得分:0)
那是因为您在成功XHR(readyState == 4和status == 200)之后将重定向到没有有效负载的相同脚本。尝试评论location.replace("take_exam.php")
,看看会发生什么。
但是也许您想检查$decoded_json
是否为stdClass
(这表示已接收并解码了json)并将结果记录到控制台:
<?php
$real_json = file_get_contents('php://input');
$decoded_json = json_decode($real_json);
if($decoded_json instanceof stdClass) {
// do somethong
var_dump($decoded_json);
// and die maybe =)
die();
}
和JS中的
if (this.readyState == 4 && this.status == 200) {
// location.replace("test.php")
// do something with response
console.log(this.response);
}
更新:
将其保存在一个PHP文件中(假设为test.php,因为xhttp.open("POST", "test.php", true);
),然后在浏览器中打开。
<?php
$real_json = file_get_contents('php://input');
$decoded_json = json_decode($real_json);
if($decoded_json instanceof stdClass) {
var_dump($decoded_json);
die();
}
?>
<button class="stu-take-test" id="math">Math</button>
<div id="response_container"></div>
<script>
var btns =document.getElementsByClassName("stu-take-test")
for (var i =0; i < btns.length; i++){
btns[i].addEventListener("click", function(){
var obj = new Object;
obj.action = "get_exam";
obj.exam = this.id;
str_json = JSON.stringify(obj);
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById('response_container').innerHTML = this.response;
}
};
xhttp.open("POST", "test.php", true);
xhttp.setRequestHeader("Content-type", "application/json");
xhttp.send(str_json);
});
}
</script>