0

在我后面的代码中

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

引发错误的javascriptUncaught SyntaxError: Unexpected token ~如下。

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

4 回答 4

2

也许你应该改变这个

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

这样

var Country = ['<% =String.Join("', '", arrayString)%>'];
于 2013-10-11T20:40:07.193 回答
1

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

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

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

这是正在发生的事情。假设您刚刚有一个名为str包含字符串的变量"foo"。然后这个:

<%= str %>

会给你:

foo

同时,假设您用str引号括起来:

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

然后你会得到:

"foo"

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

于 2013-10-11T20:39:55.103 回答
1

问题原因如下:

当你尝试加入这个

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

结果将是

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

所以如果你尝试做

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

它将导致错误,因为波浪号具有特殊含义:

波浪号是一个操作符,它会做一些你通常认为没有任何目的的事情。它是一个一元运算符,它将右侧的表达式执行这个小算法(其中 N 是波浪号右侧的表达式):-(N+1)。

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

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

于 2013-10-11T20:44:59.953 回答
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%>;
于 2013-10-11T20:46:11.103 回答