【问题标题】:Javascript/PHP Unexpected Token ';' on JSON [closed]Javascript/PHP 意外令牌';'在 JSON [关闭]
【发布时间】:2018-07-15 00:14:38
【问题描述】:

我有一个向 PHP 发出 AJAX POST 请求的页面,PHP 正在查询 MySQL,并返回一个 JSON 对象来计算查询响应。这一切都在工作,但它停止了,我不知道出了什么问题。

这是发出请求的 JS,getDriver.js

var driverList = [];

$.ajax({
    url: './php/GetDriverList.php',
    type: 'post',
    success: function(response){
        console.log(response);
        var tempList = JSON.parse(response);
        for(var i = 0; i < tempList.length; i++){
            driverList.push(tempList[i]);
        }
        buildTable(driverList);
    }
});

这里是 PHP,GetDriverList.php

<?php 
$conn = new mysqli('localhost', 'root', '');
$result = mysqli_query($conn, "USE test") or die(mysql_error());
$result = mysqli_query($conn, "SELECT id, fname, lname FROM drivers WHERE 
    isActive = 1");

$rows = array();
while($r = mysqli_fetch_assoc($result)){
    $rows[] = $r;
}

$return = json_encode($rows);
echo $return;
?>;

错误信息如下:

Error:
VM6389:1 Uncaught SyntaxError: Unexpected token ; in JSON at position 183
    at JSON.parse (<anonymous>)
    at Object.success (getDrivers.js:9)
    at u (jquery-3.3.1.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-3.3.1.min.js:2)
    at k (jquery-3.3.1.min.js:2)
    at XMLHttpRequest.<anonymous> (jquery-3.3.1.min.js:2)
success @ getDrivers.js:9
u @ jquery-3.3.1.min.js:2
fireWith @ jquery-3.3.1.min.js:2
k @ jquery-3.3.1.min.js:2
(anonymous) @ jquery-3.3.1.min.js:2
XMLHttpRequest.send (async)
send @ jquery-3.3.1.min.js:2
ajax @ jquery-3.3.1.min.js:2
(anonymous) @ getDrivers.js:5

我在 getDrivers.js 中删除了一些 cmets,第 9 行对应于“console.log(response)”。但是,此行无法登录到控制台。

最后,我在 Chrome 中从控制台的网络选项卡中拉出的 JSON 对象如下:

[{"id":"2","fname":"XXXX","lname":"XXXX"},
{"id":"3","fname":"XXXX","lname":"XXXX"},
{"id":"4","fname":"XXXX","lname":"XXXX"},
{"id":"5","fname":"XXXX","lname":"XXXX"}];

请帮忙!我的 JSON 对象突然出了什么问题?

【问题讨论】:

  • ;预计不会在那里。检查你为什么得到那个。导致错误的原因
  • Json 数据最后不能包含;。您在编码数据时缺少一些东西。

标签: javascript php jquery mysql json


【解决方案1】:

问题是?&gt;;,删除那里的;,因为也属于发送给客户端的输出。

当我使用 php 时,通常省略最后一个 ?&gt; 是一个好习惯,只有在确实需要显示数据时才添加它。这降低了意外添加不需要的输出的可能性。

【讨论】:

  • 不确定这是否符合印刷错误
  • *发送给客户
  • @FelixKling 谢谢。更正了句子。
  • 就是这样,谢谢!由于代码以前可以工作,而且我不记得做过任何重大编辑,所以我知道这一定是一些愚蠢的小事。谢谢!
【解决方案2】:

如果我没记错的话,您没有在 ajax 调用中添加 dataType。

dataType 告知响应中预期的数据类型,在您的情况下为 json。

var driverList = [];

$.ajax({
    url: './php/GetDriverList.php',
    type: 'post',
    dataType : 'json',
    success: function(response){
        console.log(response);
        var tempList = JSON.parse(response);
        for(var i = 0; i < tempList.length; i++){
            driverList.push(tempList[i]);
        }
        buildTable(driverList);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多