jquery JSON 不从 jQ AJAX 请求解析


jquery JSON not parsing from jQ AJAX request

我对jQuery相当陌生,我的JSON数据似乎没有按照我期望的方式解析。

所以我在PHP中通过json_encode($var)创建了我的数据,这似乎工作正常:

{"id":"7","0":"7","ip":"86.152.117.159","1":"86.152.117.159","proxyip":"86.152.117.159","2":"86.152.117.159","ping":"1","3":"1","time":"03:39:17","4":"03:39:17"}{"id":"6","0":"6","ip":"86.152.117.159","1":"86.152.117.159","proxyip":"86.152.117.159","2":"86.152.117.159","ping":"1","3":"1","time":"03:36:20","4":"03:36:20"}

(这是通过jQuery的AJAX从同一服务器/域上的单独URL导入的)。

但是当我使用此代码尝试导入它时:

$.ajax({url:"load.php",success:function(result){
            var obj = jQuery.parseJSON(result);
            $(".response").html(obj.id);
        }});

并检查我的控制台,我得到"未捕获的语法错误:意外的令牌{",它指向索引中的"第 1 行.php - 请注意,我没有使用外部JS文件。

我不知道我做错了什么以及我应该如何解决这个问题,以便我可以在页面上以非 json 形式显示数据(即在表格中)

任何帮助将不胜感激!

编辑:

这是我的加载.php文件:

try {
    $db = new PDO("mysql:host=$mysql_host;dbname=$mysql_db", $mysql_user, $mysql_pass);
} catch(PDOException $e) {
    $e->getMessage();
}
$update = "SELECT * FROM traffic";
foreach ($db->query($update) as $user) {
    echo json_encode($user);
}
你不能

echo json_encode(...)两次打电话。将所有结果放入一个数组中,并对其进行编码。

$result = array();
foreach ($db->query($update) as $user) {
    $result[] = $user;
}
echo json_encode($result);

然后在Javascript中,你需要一个循环来读出它们:

$.ajax({url:"load.php",success:function(result){
        var obj = jQuery.parseJSON(result);
        var ids = obj.map(function(el) {
            return el.id;
        });
        $(".response").html(ids.join(' '));
    }
});

你的 json 无效,使用 jsonlint 来检查一下。

Parse error on line 12:
...   "4": "03:39:17"}{    "id": "6",   
----------------------^
Expecting 'EOF', '}', ',', ']'

您有两个对象。像 [{}, {}] 这样的数组中应该只有一个或两个。

您应该能够一次回显所有内容,例如:

echo json_encode($db->query("SELECT * FROM traffic")->fetchAll()); 

改为尝试JSON.parse()

var obj = JSON.parse(result);

或者更好的是,在PHP中指定dataType:'json'并设置json内容类型,您不必在JS中解析任何字符串:

    $.ajax({url:"load.php", dataType:'json', success:function(result){
        $(".response").html(result.id);
    }});

谨慎:

确保您的 json 有效。如果您在 PHP 中使用循环,最好构造一个关联数组,然后将数组传递给json_encode()一次。

在chrome开发者工具控制台中,我尝试了JSON.parse(''),并得到了同样的错误。

JSON.parse('{"id":"7","0":"7","ip":"86.152.117.159","1":"86.152.117.159","proxyip":"86.152.117.159","2":"86.152.117.159","ping":"1","3":"1","time":"03:39:17","4":"03:39:17"}{"id":"6","0":"6","ip":"86.152.117.159","1":"86.152.117.159","proxyip":"86.152.117.159","2":"86.152.117.159","ping":"1","3":"1","time":"03:36:20","4":"03:36:20"}')
VM123:2 Uncaught SyntaxError: Unexpected token {

问题是您要发送两个连续的对象 - {"id":"7",...}{"id":"6",...} 。当它找到第一个右大括号}时,它需要 EOF,因此第二个左大括号{抛出意外标记语法错误。

解决方案是将对象包装在 JSON 数组中。

尝试在PHP中echo json_encode($db->query($update));,不要循环。

在 chrome 开发者工具的"网络"选项卡中,当您检查预览时,您应该会看到

[{"id":"7",...},{"id":"6",...}]

(您的其余属性替换为我的省略号)。