javascript使用JSON.parse出错

完整代码是:

$(document).ready(function() {
    var token = '4e568a7774a5984c4886c35d80d4d5' + '11828c10d8';
    var comments = [],
        reply = [];

    function pull(slug) {
        $.ajax({
            url: 'https://api.github.com/repos/zaaaac/comments/contents/' + slug,
            async: false,
            data: {
                access_token: token
            },
            success: function(data) {
                for (var i = 0; i < data.length; i++) {
                    var download_url = data[i].download_url;
                    $.ajax({
                        url: download_url,
                        async: false,
                        data: {
                            access_token: token
                        },
                        success: function(raw) {
                            if (raw.indexOf('reply') >= 0) {
                                reply.push(raw);
                            } else {
                                comments.push(raw);
                            }
                        }
                    });
                }
            }
        });
    }

    function loadComments() {
        var comments = JSON.parse(comments); 
        $('#comments-count').html('(' + comments.length + ')');
        for (var i = 0; i < comments.length; i++) {
            var id = comments[i]._id,
                name = comments[i].name,
                email = comments[i].email,
                url = comments[i].url,
                content = comments[i].content,
                date = comments[i].date;
            $('ul.comment-list-ul').append('<li id="' + id + '" class="comment"><div class="comment-avatar"><img class="avatar" src="https://secure.gravatar.com/avatar/' + email + '?s=160&amp;d=mm&amp;r=g" height="40" width="40"></div><div class="comment-body"><div class="comment-author"><a href="' + url + '">' + name + '</a></div><div class="comment-content">' + content + '</div><div class="comment-meta clearfix"><span class="comment-date">' + date + '</span></div><div class="comment-children"><ul></ul></div></li>');
        }
    }

    function loadReply() {
        var reply = JSON.parse(reply); 
        for (var j = 0; j < reply.length; j++) {
            var id = reply[j]._id,
                reply = reply[j].reply,
                name = reply[j].name,
                email = reply[j].email,
                url = reply[j].url,
                content = reply[j].content,
                date = reply[j].date;
            $('li#' + reply_id + ' .comment-children ul').append('<li id="' + reply_id + '" class="comment"><div class="comment-avatar"><img class="avatar" src="https://secure.gravatar.com/avatar/' + email + '?s=160&amp;d=mm&amp;r=g" height="40" width="40"></div><div class="comment-body"><div class="comment-author"><a href="' + url + '">' + name + '</a></div><div class="comment-content">' + content + '</div><div class="comment-meta clearfix"><span class="comment-date">' + date + '</span></div></div></li>');
        }
    }
    pull('try');
    loadComments();
    loadReply();
})

comments和reply都可以输出。用document.write输出分别是:

{"_id":"e6e83020-662c-11e7-9b06-05d55a32e74f","name":"me","email":"f4ef777876c6041d07a7e0bd48384e71","url":"","content":"test comment","date":1499772870108},{"_id":"708e1420-6691-11e7-b3ee-2358356fd23d","name":"me","email":"f4ef777876c6041d07a7e0bd48384e71","url":"","content":"another test","date":1499816050567}

{"_id":"29d3ffe0-6691-11e7-b3ee-2358356fd23d","name":"me","email":"f4ef777876c6041d07a7e0bd48384e71","url":"","content":"test reply","reply":"e6e83020-662c-11e7-9b06-05d55a32e74f","date":1499815931907}

使用JSON.parse报错:Uncaught SyntaxError: Unexpected token u in JSON at position 0

求助这是哪里出错了

阅读 5.6k
3 个回答

如果返回的数据确定是json格式的,那可以在ajax请求配置中指定为json. 这样的话就不用考虑JSON.parse了.
然后你这里 第一条数据,即不是数组也不是json
JSON.parse是将JSON格式的字符串转换为JSON对象, 调试的时候可以先typeof看看你要转换的数据是什么类型

JSON.parse是字符串转数组,我看你commentsreply都是数组,你搞反了吧
数组转字符串是JSON.stringify

从你的代码var comments = [], reply = [];,这两个是数组不能使用JSON.parse,你应该在raw放入coments或者reply中时,将其parse,前提是row应该是String类型。如果你后端使用的是MongoDB数据库,可以将取出来的值序列化成JSON,前台在将其parse成对象

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题