我背后的代码
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]);
}
});
});
我在这里做错了什么?
答案 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%>;