gpt4 book ai didi

javascript - PHP 不向 JavaScript 发送 JSON 对象

转载 作者:行者123 更新时间:2023-11-29 12:54:02 24 4
gpt4 key购买 nike

<?php
header("Content-Type: application/json");
if(isset($_POST['limit'])){
$limit = preg_replace('#[^0-9]#', '', $_POST['limit']);
require_once("connect_db.php");
$i = 0;
$jsonData = '{';
$sqlString = "SELECT * FROM tablename ORDER BY RAND() LIMIT $limit";
$query = mysqli_query($con, $sqlString) or die (mysqli_error());
while ($row = mysqli_fetch_array($query)) {
$i++;
$id = $row["id"];
$title = $row["title"];
$cd = $row["creationdate"];
$cd = strftime("%B %d, %Y", strtotime($cd));
$jsonData .= '"article'.$i.'":{ "id":"'.$id.'","title":"'.$title.'", "cd":"'.$cd.'" },';
}
$now = getdate();
$timestamp = $now[0];
$jsonData .= '"arbitrary":{"itemcount":'.$i.', "returntime":"'.$timestamp.'"}';
$jsonData .= '}';
echo $jsonData;
}
?>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var myTimer;
function ajax_json_data(){
var databox = document.getElementById("databox");
var arbitrarybox = document.getElementById("arbitrarybox");
var hr = new XMLHttpRequest();
hr.open("POST", "json_mysql_data.php", true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var d = JSON.parse(hr.responseText);
arbitrarybox.innerHTML = d.arbitrary.returntime;
databox.innerHTML = "";
for(var o in d){
if(d[o].title){
databox.innerHTML += '<p><a href="page.php?id='+d[o].id+'">'+d[o].title+'</a><br>';
databox.innerHTML += ''+d[o].cd+'</p>';
}
}
}
}
hr.send("limit=4");
databox.innerHTML = "requesting...";
myTimer = setTimeout('ajax_json_data()',6000);
}
</script>
</head>
<body>
<h2>Timed JSON Data Request Random Items Script</h2>
<div id="databox"></div>
<div id="arbitrarybox"></div>
<script type="text/javascript">ajax_json_data();</script>
</body>
</html>

PHP 代码位于一个名为“json_mysql_data.php”的单独文件中。我只是按照 https://www.youtube.com/watch?v=-Bv8P5oQnFw 的教程进行操作对他来说效果很好,但对我来说则不然。我单独使用 mysql 测试了“connect_db.php”,它工作正常。在我看来,php 不会通过 if (isset ($_POST['limit'])) 但为什么...在 html 文件上,我从 javascript 代码中收到“请求...”消息,这意味着等待PHP。感谢大家的帮助。

最佳答案

您检查就绪状态并更改 databox 的内容响应 JSON onreadystatechange功能:

hr.onreadystatechange = function(aEvt) {
if(hr.readyState == 4 && hr.status == 200) {

databox.innerHTML += …;

}

databox.innerHTML = "requesting...";

}

但是您更改了 databox 的 HTML :

databox.innerHTML = "requesting...";

仍然 onreadystatechange 的区 block 内函数,并且之后您收到响应,因此 databox总是会说"requesting..."无论您收到什么。您必须移动打印 "requesting..." 的部分在它之外:

hr.onreadystatechange = function(aEvt) {
if(hr.readyState == 4 && hr.status == 200) {

databox.innerHTML += …;

}

}

databox.innerHTML = "requesting...";

更新:

此外,您的函数似乎没有正确定义,如您所见, MDN reference pages 上的函数示例接收参数:

req.onreadystatechange = function(aEvt) {

}

但是你的没有这样的参数:

hr.onreadystatechange = function() {

}

就是这样。

关于javascript - PHP 不向 JavaScript 发送 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24348023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com