【问题标题】:SyntaxError: expected expression, got ')'SyntaxError: 预期的表达式,得到 ')'
【发布时间】:2019-05-22 20:43:44
【问题描述】:

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

更新: 当我在 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;
        }
    }
});

【问题讨论】:

  • 我不精通 javascript,但你的第一个函数 }; 右括号后面有一个分号。不确定这是否会导致错误。
  • 控制台日志xml查看您返回的数据是什么 - console.log(xml);
  • @Rasclatt 分号不会导致错误,但你是对的,在这种情况下不适合放置};。如果您将匿名函数定义为变量,那么}; 是合适的。 (即var f = function(){};
  • 是的,我在我的电脑上试过了,它没有抛出任何错误。
  • 哦,我明白了。你打电话给eval('(' + xml + ')')xml 必须为空字符串。它来自哪里,你想用它做什么? eval 通常用于运行一段代码,通常不是一个好主意。您希望 server.php 提供什么样的数据?

标签: javascript jquery


【解决方案1】:

read up on eval 可能会有所帮助。它看起来不像你认为的那样。

eval() 是一个危险的函数,它以调用者的权限执行它传递的代码。

还有

对于常见的用例,eval() 有更安全(更快!)的替代方法。

看起来您正在尝试以 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)对其进行迭代。

【讨论】:

  • 这是正确答案。在这种情况下使用 eval 是非常错误的,这个答案可以解决它。
【解决方案2】:

SyntaxError: expected expression, got ')' 通常是由

之类的原因引起的
exeFunction(a,b,) 

看看你的表单提交函数ajax是否会导致这样的错误

$("#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

});

【讨论】:

  • 我尝试删除逗号,但似乎没有帮助。
【解决方案3】:

如果您在单击时触发 java 脚本或触发任何单击。有时缺少 0 会导致上述错误。

<a href="javascript:void(0);">delete</a>

【讨论】:

    【解决方案4】:

    JSON.stringify({datasize: '1024'}) 能解决问题吗?只是猜测

    【讨论】:

    • 不,jQuery 将数据对象转换为application/x-www-form-urlencoded 格式以在 POST 正文中使用。 OP 根本没有表示这是一个问题
    • k.. 很高兴知道。我已经学会了对传入 jQuery ajax 调用的每个模型进行字符串化,否则它对我不起作用.. 很可能这与我与之交谈的 web api 有关.. 为什么我说这是一个猜测。
    猜你喜欢
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2015-09-13
    相关资源
    最近更新 更多