SyntaxError: неопределенный строковый литерал с массивом JSON

1

Так что я...

 var newfavz = 'Array (


[0] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]
[1] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]
[2] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]

)
';

на моем console.log, но почему-то есть синтаксическая ошибка: unterminated string literal. Я просмотрел и попробовал такие методы, как str_replace "/" с "//" или регулярное выражение типа.replace(/^/+/g, ''); потому что похоже, что JavaScript не позволяет разбивать строки на несколько строк или что-то в этом роде.

Все это началось с SQL-запроса, например...

$favurl = [];
$favquery = "SELECT * FROM userfavs WHERE users = '$username'";
$favresult = mysqli_query($conn, $favquery);

while($row = mysqli_fetch_assoc($favresult)) {

array_push($favurl, $row['fav_id']);

Впоследствии я сделал

var newfavz = <?php print_r ($favurl); ?>

что привело к вышесказанному.

Можно ли каким-либо образом использовать синтаксическую ошибку? Спасибо!

  • 2
    echo результат json_encode вместо использования print_r . Напечатанная строка бесполезна в среде JavaScript, проверьте stackoverflow.com/questions/4885737/…
  • 0
    извините, я использовал print_r, когда делал отладку :)
Теги:

3 ответа

0
Лучший ответ

Причина: многострочные строки не разрешены в js:

"A
 B"

Является синтаксической ошибкой. Вы можете удалить все новые строки и заменить их \n или использовать шаблонные литералы:

'A
 B'

В вашем коде:

var newfavz =' <?php print_r ($favurl); ?>';

Так много об ошибке. Однако строка все еще непригодна для использования, ее необходимо проанализировать. Посмотрите на JSON или напишите свой собственный маленький парсер.

  • 0
    Чтобы добавить к этому, на сервере вы должны закодировать массив в объект json с помощью метода json_encode () перед передачей в JS.
  • 0
    Эй, я забыл добавить это к вопросу, но я использовал метод JSON_encode, прежде чем вставлять данные в базу данных SQL. Пока что я нашел единственный способ удалить эту неопределенную строковую буквальную ошибку - это сделать еще один JSON_encode, который является довольно глупым IMO.
Показать ещё 2 комментария
0

Вы должны поместить обратную косую черту в конце каждой строки, чтобы иметь многострочную строку:

var newfavz = 'Array (\
[0] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]\
[1] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]\
[2] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]\
)\
';
0

Либо используйте шаблоны шаблонов ES6:

var newfavz = 'Array (


[0] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]
[1] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]
[2] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]

)
';

Или с обратной косой чертой:

var newfavz = 'Array (\n\
\n\
\n\
[0] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]\n\
[1] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]\n\
[2] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]\n\
\n\
)\
';

Или объединить:

var newfavz = 'Array (\n' +
  '\n' +
  '\n' +
  '[0] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]\n' +
  '[1] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]\n' +
  '[2] => [" 6 "," 1 "," 2 "," 5 "," 3 "," 4 "]\n' +
  '\n' +
  ')\n';

\n используется для представления newline.

  • 0
    Спасибо чувак! Я использовал символы ``, и это сработало отлично!

Ещё вопросы

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