未捕获的SyntaxError:意外的令牌&lt;在位置0的JSON中:在对象的JSON.parse(<anonymous>)处。<anonymous>

时间:2017-04-12 08:11:25

标签: javascript php jquery json

我在JSON.parse()中有错误,我有.php文件,其中包含从数据库中检索数据的方法和.js文件中的autoComplete函数,我的.php文件以字符串形式返回数据,我需要将其转换为使用JSON.parse()。

这是我的php文件

.replaceAll("[\\W_]", "%");

这是我的autoComplete.js文件

<?php 
include_once("database_conn.php");

function request($conn)
{
    $eventstArray = array();

    $events = "SELECT * 
                FROM te_events,te_category,te_venue
                WHERE te_events.venueID = te_venue.venueID 
                    AND te_events.catID = te_category_catID
                ORDER BY 1
                ";

    $eventsQuery1 = mysqli_query($conn,$events) or DIE (mysqli_error($conn));

    while($eventsQuery2 = mysqli_fetch_array($eventsQuery1))
    {
        $eventstArray[] = array
        (
            'label'         => $eventsQuery2['eventTitle'];
            'venue'         => $eventsQuery2['venueName'];
            'category'      => $eventsQuery2['catDesc'];
            'price'         => $eventsQuery2['eventPrice'];
            'description'   => $eventsQuery2['eventDescription'];
        );
    }

    return json_encode($eventstArray);
}
echo request($conn);
?>

我无法删除JSON.parse(),因为我需要将其从字符串转换为对象,希望有人可以帮我解决这个问题,我真的很感激。

5 个答案:

答案 0 :(得分:2)

错误在您的服务器端,当您的服务器端出现错误时,响应带有html标签'&lt;'当出现错误时,php将添加带有错误消息的标记。因此,您的json包含html标记,并且由于意外标记而变为无效。

  

错误在此数组

$eventstArray[] = array
        (
            'label'         => $eventsQuery2['eventTitle'];
            'venue'         => $eventsQuery2['venueName'];
            'category'      => $eventsQuery2['catDesc'];
            'price'         => $eventsQuery2['eventPrice'];
            'description'   => $eventsQuery2['eventDescription'];
        );

应该是

$eventstArray[] = array(
            'label' => $eventsQuery2['eventTitle'],
            'venue' => $eventsQuery2['venueName'],
            'category' => $eventsQuery2['catDesc'],
            'price' => $eventsQuery2['eventPrice'],
            'description' => $eventsQuery2['eventDescription']
        );

(问题来源是描述值后面的分号(;))。 它应该只在数组的 end

答案 1 :(得分:0)

当给予JSON.parse的值实际上未定义时,通常会看到该错误。所以,我会检查试图解析它的代码 - 很可能你没有解析这里显示的实际字符串。

答案 2 :(得分:0)

这是服务器端错误。您可以使用浏览器的开发人员工具(如firefox)检查服务器返回的值(php代码)并检查响应消息。

另外,也许你可以删除JSON.parse()并在ajax函数中添加dataType:“json”

答案 3 :(得分:0)

检查是否仅将json编码的响应仅返回。如果您在php脚本中执行var dump之类的操作,请确保将其注释掉,因为它也会附加到您的javascript响应中

答案 4 :(得分:0)

如果您确定您的php代码正确无误,但无法解析返回的json字符串,请选中此选项。

我有类似的问题。 我发现我的PHP代码已保存为UTF8,但没有No-BOM选项。 这增加了三个额外的字符:ο»Ώ(十六进制:EF BB BF) 在文件的开头,导致返回的json字符串的开头有那些额外的字符。

这是我的php文件的开头: ο»Ώ<?php include ...

preview of code in hex mode