JS uncaught синтаксическая ошибка, когда на сервере, но не localhost - PullRequest
0 голосов
/ 01 мая 2018

У меня есть переменная php, которую я изменяю в массив JS

orderform.blade:

    <?php
    foreach ($entries as $entry){
        $name[] = $entry->name;
        $quantity[] = $entry->quantity;
    }
    ?>


    <script type="text/javascript">
    var entries = JSON.parse('<?php echo json_encode($entries) ?>');
//  console.log(entries);
    </script>

Тогда в моем файле JS я использую переменную

var output = entries.reduce(function (orderA, orderB){...

Отлично работает на локальном хосте. Но когда я включаю цифровой океанский облачный сервер, я получаю:

Uncaught SyntaxError: missing ) after argument list
Uncaught ReferenceError: entries is not defined at javascript.js:12

Отсутствует) ошибка подсвечивает это:

        var entries = JSON.parse('[{"id":2,"name":"Britannia","mint":"The Royal Mint","quantity":"3","weight":"31.15","price":"19.00","description":"Royal Mint flagship silver bullion. CGT free.","created_at":"2018-05-01 03:08:38","updated_at":"2018-05-01 03:27:23"},{"id":3,"name":"Maple Leaf","mint":"The Royal Canadian Mint","quantity":"12","weight":"31.15","price":"17.50","description":"Canada's flagship bullion coin. Prone to milk spots.","created_at":"2018-05-01 10:41:57","updated_at":"2018-05-01 10:41:57"}]');

Что может заставить это работать в одной среде, а не в другой? Как мне это решить? Я не вижу здесь никакой синтаксической ошибки?

1 Ответ

0 голосов
/ 01 мая 2018

Синтаксическая ошибка из-за того, что ваш строковый литерал использует разделитель апострофов внутри себя. Вам нужно сбежать из вашего JSON. Где генерируется эта строка JSON?

Что формально происходит:

'Canada's more characters... ')

StringLiteral 'Канада' + [lookahead ~ = {) }]

Итак, вам, очевидно, не следует просто передавать исходный код JSON в источник JavaScript. Избегайте кавычек и апострофов с вашего PHP-сервера.

(я думаю, preg_replace не заменит все вхождения кавычек, но в JS я знаю, что json.replace(/'"\''/g, s => \ $ {s} ) сделает.)

preg_replace('("|\')', '\\$0', $json)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...