我有一个存储用户名等数据的mysql数据库。我有一个名为result的PHP文件,它从数据库中检索结果并将它们编码为JSON字符串。然后我想要相同的PHP文件输出结果而不重新加载页面(通过ajax)。实际上,我希望同一页面将JSON字符串作为HTTP请求获取,我该如何解决此问题
到目前为止这是results.php
<?php
$link = mysql_connect('', '', '');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db('test', $link);
if (!$db_selected) {
die ('Can\'t use test : ' . mysql_error());
}
$result = mysql_query("SELECT user_name FROM users");
if (!$result) {
die('Invalid query: ' . mysql_error());
}
$names = array();
while ($row = mysql_fetch_assoc($result)) {
foreach ($row as $key => $val) {
$names[][$key] = $val;
}
}
if ($_GET['myvar'] == "done")
{
$ennames = json_encode($names);
echo $ennames;
exit();
}
?>
<script src="jquery-1.7.1.min.js">
function getJSON()
{
$.getJSON("results.php", { myvar: "done" }, function(data) {
var namesHTML = "";
$.each(data, function(key, val) {
namesHTML = namesHTML + val + "<br/>";
});
$("#divForNames").html(namesHTML);
});
setTimeOut(getJSON, 5000); //the 5000 here means 5 seconds
}
</script>
<div id="divForNames">
</div>
答案 0 :(得分:2)
您的PHP需要进行的唯一调整是在分配$ennames
后立即添加if语句:
if ($_GET['myvar'] == "specific-value-that-you-choose")
{
echo $ennames;
exit();
}
对于轮询,你需要做一些客户端脚本 - 很可能是javascript,最容易用jQuery编写。查看.getJSON()
jQuery函数和setTimeOut()
以创建逻辑来执行此轮询。它可能看起来像这样:
function getJSON()
{
$.getJSON("result.php", { myvar: "specific-value-that-you-choose" }, function(data) {
var namesHTML = "";
$.each(data, function(key, val) {
namesHTML = namesHTML + val + "<br/>";
});
$("#divForNames").html(namesHTML);
});
setTimeOut(getJSON, 5000); //the 5000 here means 5 seconds
}
然后在非JSON页面的HTML中,你需要包含一个<div>
,其id设置与你在$.getJSON()
函数中使用的id匹配(在这种情况下,我' d需要一个空的<div id="divForNames">
,但您可以更改名称以符合您的偏好。