Простой Javascript выдает «Uncaught SyntaxError: Неожиданный токен ~»

0

В коде позади у меня есть

  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]);
                }
            });
        });

Что я здесь делаю неправильно?

  • 6
    Проверьте ваш предоставленный JavaScript. Я думаю, что вы теряете цитаты вокруг строк.
  • 0
    удалите eval и просто сохраните строку, затем осмотрите эту строку. скорее всего, это не то, что вы ожидаете.
Показать ещё 1 комментарий

4 ответа

2

Может быть, вы должны изменить это

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

этим

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

Самое простое исправление, связанное с наименьшим изменением, состояло в том, чтобы просто добавить кавычки к вашей строке со стороны VB:

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

Как упоминалось в комментарии, вам также не нужно иметь значение eval.

Вот что происходит. Скажем, у вас была переменная str содержащая строку "foo". Тогда это:

<%= str %>

даст вам:

foo

Между тем, скажем, вы завернули str в кавычки:

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

Тогда вы получите:

"foo"

Поскольку JavaScript нуждается в этих котировках, они должны быть частью строки. Я надеюсь, что в этом есть смысл.

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/

поэтому, когда вы его оцениваете, это вызовет ошибку

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%>;
  • 0
    Лучше, чем википедия! Не знал этого! Но я получаю синтаксическую ошибку рядом с <% = arrayJson%>; и сценарий, похоже, не работает. Я удаляю eval часть, она прекрасно работает
  • 0
    Синтаксическая ошибка VB или JavaScript? Как выглядит визуализированный JavaScript?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню