В коде позади у меня есть
Public arrayString As String() = {"100~USA~UsaDescr", "101~SPAIN~SpainDescr"}
Javascript, который выдает ошибку Uncaught 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]);
}
});
});
Что я здесь делаю неправильно?
Может быть, вы должны изменить это
var Country = eval('[<% =String.Join(", ", arrayString)%>]');
этим
var Country = ['<% =String.Join("', '", arrayString)%>'];
Самое простое исправление, связанное с наименьшим изменением, состояло в том, чтобы просто добавить кавычки к вашей строке со стороны VB:
Public arrayString As String() = {"""100~USA~UsaDescr""", """101~SPAIN~SpainDescr"""}
Как упоминалось в комментарии, вам также не нужно иметь значение eval
.
Вот что происходит. Скажем, у вас была переменная str
содержащая строку "foo"
. Тогда это:
<%= str %>
даст вам:
foo
Между тем, скажем, вы завернули str
в кавычки:
str = """" + str + """"
Тогда вы получите:
"foo"
Поскольку JavaScript нуждается в этих котировках, они должны быть частью строки. Я надеюсь, что в этом есть смысл.
проблема возникает следующим образом:
когда вы пытаетесь присоединиться к этому
{"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/
поэтому, когда вы его оцениваете, это вызовет ошибку
Вы теряете кавычки, обертывающие строки, и вы не должны (и никогда не должны) использовать 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%>;