简单的Javascript抛出“Uncaught SyntaxError:Unexpected token~”

时间:2013-10-11 20:34:41

标签: javascript jquery asp.net vb.net

我背后的代码

  Public arrayString As String() = {"100~USA~UsaDescr", "101~SPAIN~SpainDescr"}

抛出错误Uncaught SyntaxError: Unexpected token ~的javascript如下。

   $(document).ready(function () {

            var Country = eval('[<% =String.Join(", ", arrayString)%>]');

            $('#slider').slider({
                max: 1,
                min: 0,
                slide: function (event, ui) {
                    var splitValues = Country[ui.value].split("~");
                    $('#hpGame').html(splitValues[0]);
                    $('#hpHome').html(splitValues[1]);
                    $('#hpAway').html(splitValues[2]);
                }
            });
        });

我在这里做错了什么?

4 个答案:

答案 0 :(得分:2)

也许你应该改变这个

var Country = eval('[<% =String.Join(", ", arrayString)%>]');

由此

var Country = ['<% =String.Join("', '", arrayString)%>'];

答案 1 :(得分:1)

涉及最小变化的最简单修复方法是从VB端向字符串添加引号:

Public arrayString As String() = {"""100~USA~UsaDescr""", """101~SPAIN~SpainDescr"""}

正如评论中提到的那样,您也不应该需要eval

这是发生了什么。假设您刚才有一个名为str的变量,其中包含字符串"foo"。然后这个:

<%= str %>

会给你:

foo

与此同时,假设您将str括在引号中:

str = """" + str + """"

然后你会得到:

"foo"

由于JavaScript需要这些引号,因此它们必须是字符串的一部分。我希望这是有道理的。

答案 2 :(得分:1)

问题的原因如下:

当您尝试加入此

{"100~USA~UsaDescr", "101~SPAIN~SpainDescr"}

结果将是

"100~USA~UsaDescr, 101~SPAIN~SpainDescr"

所以,如果你试图做

eval("100~USA~UsaDescr, 101~SPAIN~SpainDescr")

它会导致错误,因为代字号具有特殊含义:

  

代字号是一个操作员,可以做你通常想到的事情   没有任何目的。这是一个一元的运营商   右边的表达式对它执行这个小算法(其中N.   是波浪号右边的表达式): - (N + 1)。

sourse:http://www.joezimjs.com/javascript/great-mystery-of-the-tilde/

因此当你评估它时会导致错误

答案 3 :(得分:0)

你丢失了包裹字符串的引号,你没有(也不应该)使用eval()。此外,javascript序列化是一个常见问题,您不应该(并且不应该)尝试手动执行此操作:

在您的代码隐藏中:

Dim serializer as New System.Web.Script.Serialization.JavaScriptSerializer()
Public arrayString As String() = {"100~USA~UsaDescr", "101~SPAIN~SpainDescr"}
Dim arrayJson as String = serializer.Serialize(arrayString)

在您的信息页中:

var Country = <%=arrayJson%>;