javascript - 语法错误 : expected expression, 得到 ')'

标签 javascript jquery

我已经被这个错误困扰了几天,但仍然无法弄清楚出了什么问题。如果有人能给我指出解决这个问题的正确方向,那就太好了。

更新: 当我在 updateMsg() 函数中评论“addMessages(xml)”时,我意识到错误消失了。那我该如何让它工作呢?

错误: http://i.imgur.com/91HGTpl.png

代码:

$(document).ready(function () {
    var msg = $("#msg");
    var log = $("#log");
    var timestamp = 0;

    $("#name").focus();

    $("#login").click(function() {
        var name = $("#name").val();
        if (!name) {
            alert("Please enter a name!");
            return false;
        }

        var username = new RegExp('^[0-9a-zA-Z]+$');

        if (!username.test(name)){
            alert("Invalid user name! \n Please do not use the following characters \n `~!@#$^&*()=|{}':;',\\[\\].<>/?~@#");
            return false;
        }

        $.ajax({
            url: 'login.php',
            type: 'POST',
            dataType: 'json',
            data: {name: name},
            success: function() {
                $(".login").hide();
            }
        })
        return false;
    });

    $("#form").submit(function() {
        if (!msg.val()) {
            return false;
        }

        $.ajax({
            url: 'add_message.php',
            type: 'POST',
            dataType: 'json',
            data: {message: msg.val()},
        })

        msg.val("");

        return false

    });

    window.setInterval(function () {
        updateMsg();
    }, 300);

    function updateMsg() {
        $.post('server.php', {datasize: '1024'}, function(xml) {
            addMessages(xml);
        });
    }

    function addMessages(xml) {

        var json = eval('('+xml+')');

        $.each(json, function(i, v) {

            tt = parseInt(v.time);

               if (tt > timestamp) {
                console.log(v.message);
                appendLog($("<div/>").text('[' + v.username + ']' + v.message));
                timestamp = tt
            }
        });
    }

    function appendLog(msg) {
        var d = log[0]
        var doScroll = d.scrollTop == d.scrollHeight - d.clientHeight;
        msg.appendTo(log)
        if (doScroll) {
            d.scrollTop = d.scrollHeight - d.clientHeight;
        }
    }
});

最佳答案

这可能有助于read up on eval一点点。它看起来不像你想象的那样。

eval() is a dangerous function, which executes the code it's passed with the privileges of the caller.

还有

There are safer (and faster!) alternatives to eval() for common use-cases.

看起来您想要做的是以 JSON 形式从服务器获取数据。您需要确保您的服务器返回有效的 JSON,您可以对其进行验证 here 。大多数服务器端编程语言都有一个库,可以将对象转换为 JSON,使之变得轻而易举。 Here's an example for php .

在客户端,您需要将 var json = eval('(' + xml + ')'); 更改为 var json = JSON.parse(xml ); 这将为您提供 php/perl/python/etc 对象的 javascript 版本。如果它是一个数组,则可以使用 for 循环、Array.prototype.forEach 或来自不同库的各种函数(例如 )对其进行迭代$.each_.each

关于javascript - 语法错误 : expected expression, 得到 ')',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812338/

相关文章:

javascript - 如何从表行中获取特定列

javascript - 用于检查输入是否不为空的 Jquery 脚本。空格键问题

javascript - 除最后一个 <td> 元素之外的 Fire Click 函数 - Jquery

javascript - 垂直滚动图片库

javascript - 从渲染列表中获取点击元素的 ID

javascript - 使用拖放时如何在服务器端获取新的 GridView 行顺序?

javascript - 协助伪编码

jQuery 重复元素及其后面的数字

jquery - Rails 3 - 远程表单提交后指定表单操作

javascript - 按卡片标题过滤只会带来文本,而不是包含所有元素的整张卡片