如何从 HTTP GET 请求中获取 JSON 字符串


How to get JSON string from HTTP GET request

我有一个存储用户名等数据的mysql数据库。我有一个名为result的PHP文件,它从数据库中检索结果并将它们编码为JSON字符串。然后,我希望相同的PHP文件在不重新加载页面(通过ajax)的情况下输出结果。实际上,我希望同一页面将JSON字符串作为HTTP请求获取,我该如何做到这一点

这是结果.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>

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 中的某个地方,您需要包含一个 id 设置为与您在 $.getJSON() 函数中使用的 id 相匹配的<div>(在这种情况下,我需要一个空<div id="divForNames">但您可以更改名称以适应您的偏好。