无法将 JSON 字符串从 PHP 文件传输到 Jquery 中的 getJSON 方法


Can't transfer JSON string from PHP file to a getJSON method in Jquery

这就是我想要的,在一个名为input的PHP页面上.php用户通过html表单提交用户名。这被存储到 MYSQL 数据库中。有一个名为 results.php 的页面在 MYSQL 数据库中查询所有用户名。

我需要发生的是,每隔 5 秒左右,一些 jquery 代码(可能是 getJSON(就会从结果中获取一个 JSON 字符串.php(同一页面(。此 JSON 字符串可能会更新,因为用户可以在输入.php页面上添加更多用户名。

这是输入.php文件

        <form name="input" action="<?php $_SERVER['PHP_SELF']?>" method="post">
        Usernames: <input type="text" name="usernames" />
         <input type="submit" value="Submit" name="submit" />
    </form>
    <?php
    if(isset($_POST['submit'])) {
        $link = mysql_connect('', '', '');
        if (!$link) {
            die('Could not connect: ' . mysql_error());
        }
        $db_selected = mysql_select_db('', $link);
        if (!$db_selected) {
            die ('Can''t use  : ' . mysql_error());
        }
        $result = mysql_query("INSERT INTO users(user_name)             VALUES('".$_POST['usernames']."')");
        if (!$result) {
            die('Invalid query: ' . mysql_error());
        }

    }
    ?>

这是结果.php文件

    <script
        type="text/javascript" src="jquery-1.7.1.min.js"></script>
    <?php
    $link = mysql_connect('localhost', 'root', '');
    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;
        }
    }
    echo json_encode($names);

    ?>
    <script type="text/javascript"> 


        $.getJSON("http://localhost/test/results.php", function(json){
            alert("JSON Data: " + json);
        });
    </script>

    <div></div>

被困在要放置什么jquery上,或者即使我做得正确。最终结果就像Gmail一样,您无需刷新页面即可接收电子邮件。但是我的系统会每 5 秒从数据库中检索一次用户名,而无需刷新页面。我已经阅读了有关getJSON方法的信息,并且我完全不了解它,因此我可能需要一些非常深入的解释。如果我以错误的方式实现这一目标,请告诉我并告诉我如何实现这一目标的良好做法。

我在浏览器中尝试使用此 url,除了 php 代码中回显的 JSON 字符串外,没有任何结果。

这是我的 JSON 字符串

[{"user_name":"马特"},{"user_name":"马特"},{"user_name":"彼得"},{"user_name":"吉姆"},{"user_name":"山姆"}]

你正在寻找的叫做AJAX,你需要javascript来完善它。 如果你想要一个时尚和简单的方法,我会推荐jQuery.你的代码看起来像这样:

setTimeout(function(){
    $.post("results.php",function(result){
        //Do somthing with the result Array or object
    },"json");
},5000);

此外,由于您只获取 1 条数据"用户名",因此您应该返回数组 JSON 而不是对象 JSON

["matt","matt","peter","jim","sam"]

对于您和您的用户来说,它应该需要更少的带宽。

注意:您应该从结果中删除 jquery 脚本.php,唯一应该重新调整的是 JSON 本身。 如果有任何疑问,请询问

如果你想使用结果.php做这两件事(即显示用户名以及响应JSON查询(,那么你需要将文件拆分为两个分支。使用 _GET 变量指定哪个分支。例如,您将对 results.php?json=true 运行 .getJSON,而不仅仅是 results.php。现在在结果中.php有一个 if 分支来检查这个 _GET 变量是否存在,如果是,则获取您需要的数据,在 json 编码的字符串中回显它,然后 exit((。在结果中执行所有这些操作之前.php,甚至在 <script> 标签之前。

编辑以提供代码:(根据OP的问题编辑(

<?php
    $link = mysql_connect('localhost', 'root', '');
    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 (isset($_GET['json'])) {
        echo json_encode($names);
        exit();
    }
    ?>
    <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
    <script type="text/javascript"> 
        $.getJSON("http://localhost/test/results.php?json=true", function(json){
            alert("JSON Data: " + json);
        });
    </script>

    <div></div>
您可以使用

setTimeout。

   setTimeout( function() {
    getData()
  }, 5000);
 function getData() {
    $.getJSON("http://localhost/test/results.php", function(json){
        alert("JSON Data: " + json);
    });
    });
   }