javascript - 未捕获语法错误 : Unexpected token < in JSON at position 2 at JSON. 在对象处解析 (<anonymous>)。<anonymous> (userhistory.js:23)

标签 javascript php jquery json ajax

所以我对我正在处理的这段代码有疑问。我一直在使用在下面的链接中找到的聊天功能。当我将它集成到我的应用程序中使用时,它工作得很好,尽管我在修改它时遇到了麻烦。然而,为了为我的网站创建用户历史记录功能,我开始使用相同的基本系统但使用不同的变量重新创建此功能。但是我似乎无法理解为什么会出现此错误。

Uncaught SyntaxError: Unexpected token < in JSON at position 2
    at JSON.parse (<anonymous>)
    at Object.<anonymous> (userhistory.js:21)
    at i (jquery-2.2.3.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-2.2.3.min.js:2)
    at z (jquery-2.2.3.min.js:4)
    at XMLHttpRequest.<anonymous> (jquery-2.2.3.min.js:4)

这很奇怪,因为原始版本和我的版本几乎相同,但有一些差异,但是我的版本给了我这个语法错误。我在这里读过一些类似的帖子,但除了说以不同的方式做之外,没有人真正回答了我的问题。但由于相同的语法已经适用于略有不同的变量,因此我倾向于找出为什么我的语法不起作用。任何帮助,将不胜感激。我发布了下面工作版本的代码,并且发布了我用来测试的简单 html 文档。我已经一个字符一个字符地检查了我的字符,以确保我没有错过任何东西,在我单击此处的帖子之前,我加倍努力,只是为了防止最终的菜鸟失败。预先感谢各位。

https://www.phpclasses.org/blog/package/3213/post/1-Tutorial-on-Creating-an-AJAX-based-Chat-system-in-PHP.html

用户历史记录.js

var userID = 0;

$(document).ready(function() {
    $('#btnSend').click(function(){
        updateHistory();
        $('#input').val("");
    });
    startHistory();
});

function startHistory(){
    setInterval(function(){ getHistory(); }, 2000);
}

function getHistory(){
    $.ajax({
        type: "GET",
        url: "/refreshhistory.php?userID="+userID
    }).done(function( data )
    {
        var jsonData = JSON.parse(data); <-- This is where the debugger shows an error
        var jsonLength = jsonData.results.length;
        var html = "";
        for (var i = 0; i < jsonLength; i++) {
            var result = jsonData.results[i];
            html += '<div id="tb-testimonial" class="testimonial testimonial-primary-filled">'+'<div class="testimonial-section">(' + result.actionDate+ ') <b>' + result.userID +'</b>: '+result.action+ '</div>'+'</div>'+'<div class="input-group">'+'<hr/>'+'</div>';
            userID = result.userID;
        }
        $('#view_history').append(html);
    });
}

function updateHistory(){
    var input = $('#input').val();
    if(input != ""){
        $.ajax({
            type: "GET",
            url: "/newhistory.php?action="+encodeURIComponent( input )
        });
    }
}

messages.js

var lastTimeID = 0;

$(document).ready(function() {
    $('#btnSend').click(function(){
        sendChatText();
        $('#chatInput').val("");
    });
    startChat();
});

function startChat(){
    setInterval(function(){ getChatText(); }, 2000);
}

function getChatText(){
    $.ajax({
        type: "GET",
        url: "/refresh.php?lastTimeID="+lastTimeID
    }).done(function( data )
    {
        var jsonData = JSON.parse(data);
        var jsonLength = jsonData.results.length;
        var html = "";
        for (var i = 0; i < jsonLength; i++) {
            var result = jsonData.results[i];
            html += '<div id="tb-testimonial" class="testimonial testimonial-primary-filled">'+'<div class="testimonial-section">(' + result.chattime+ ') <b>' + result.usrname +'</b>: '+result.chattext+ '</div>'+'</div>'+'<div class="input-group">'+'<hr/>'+'</div>';
            lastTimeID = result.id;
        }
        $('#view_ajax').append(html);
    });
}

function sendChatText(){
    var chatInput = $('#chatInput').val();
    if(chatInput != ""){
        $.ajax({
            type: "GET",
            url: "/submit.php?chattext=" + encodeURIComponent( chatInput )
        });
    }
}

HTML

<!DOCTYPE html>
<html>
<head>
</head>
<body>

<h2>JavaScript Alert</h2>

                <div class="col-sm-6" id="view_history">
                </div>
                <div class="input-group">
                    <div class="btn btn-secondary" id="ajaxForm">
                        <input type="text" class="input-large search-query" id="input" /><input type="button" class="btn btn-primary btn-sm" value="Send" id="btnSend" />
                    </div>
                </div>  
<script type="text/javascript" src="../assets/plugins/jQuery/jquery-2.2.3.min.js"></script>             
<script type="text/javascript" src="userhistory.js"></script>
</body>
</html>

刷新历史记录.php

<?php
session_start();
require_once("/dbconnect.php");
require_once("/userhistoryclass.php");
$userID = intval($_GET['userID'] );
$jsonData = userHistoryClass::getuserHistory($userID);
print $jsonData;
?>

按照要求,我直接进入refreshhistory.php?userID=my_ID并得到结果

{"results":[{"accountID":"ba7c7ed76e0270fdf1a0a616d3c02849","action":"dasdfadsfasdfasdf","actionDate":"02:34:22"},{"accountID":"ba7c7ed76e0270fdf1a0a616d3c02849","action":"DASDFDFDFD","actionDate":"03:15:02"}]}

这样就可以了,但是解析问题仍然存在。只是想更新一下。

所以我的问题是我没有调用 JS 文件中的正确位置,我假设 js 像 PHP 一样工作并且会识别它所在的文件夹,所以我没有对特定文件夹添加额外的引用。新手错误。感谢詹姆斯和杰夫帮助我弄清楚我还有很长的路要走:)

最佳答案

我已经遇到了同样的问题:

我这样做了:

 $.get('ping', function(response) {
                   console.log(typeof response);
                  var res = JSON.parse(response);
                  if (res.showButton) {
                  var temps = res.time; // 'matin' or 'soir'

...其余代码。

当我运行它时,我得到:

VM13008:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
    at Object.success (new:21)
    at i (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at A (jquery.min.js:4)
    at XMLHttpRequest.<anonymous> (jquery.min.js:4)

和你一样的错误。

我点击此处VM13040:1我看到:[object Object]

我认为问题可能是转换的问题(我不确定)。

要解决这个问题,只需这样做:

省略:

var jsonData = JSON.parse(data);

并根据您的情况直接使用response;data

就我而言,代码如下所示:

function pingServer() {
                console.log('to ping');
              $.get('ping', function(response) {
               console.log(typeof response);
              if (response.showButton) {
              var temps = response.time; // 'matin' or 'soir'

...其余代码。

关于javascript - 未捕获语法错误 : Unexpected token < in JSON at position 2 at JSON. 在对象处解析 (<anonymous>)。<anonymous> (userhistory.js:23),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44295077/

相关文章:

php - jQuery lightbox 从数据库通过 PHP/Ajax 强制第一次双击

php - 将 MS ACCESS 数据库导入 mySql?

jquery - 我可以对 jQuery 周日历插件应用限制吗?

javascript - 从 select jquery 中删除所有选项,但只有一个

javascript - 使用 Javascript 获取用户的 Github 存储库列表

javascript - 服务器端 JavaScript : HTTP GET with cookie?

php - 使用 gzuncompress() 解码 xml 输出 : data error in

php - Magento CE18 : Cannot save new password nor place order using credit card

javascript - date.getTime 不是一个函数

jquery - 在 Twitter Bootstrap 中使用不同的轮播间隔