Хранение PHP в Javascript не работает в отдельном документе

Когда я помещаю скрипт прямо в файл .PHP, мой скрипт работает отлично:

function setup()
{
    var setRows = <?php if (!isset($_GET['rows']))echo 3;else echo $_GET['rows']; ?>;
    var setColumns = <?php if (!isset($_GET['columns']))echo 3;else echo $_GET['columns']; ?>;
    document.getElementById('rows').value = setRows;
    document.getElementById('columns').value = setColumns;
    document.getElementById('rowOutputId').value = setRows;
    document.getElementById('colOutputId').value = setColumns;
}

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

<script type = "text/javascript" src = "js/file.js"></script>

Это перекликается со следующим:

<?php if (!isset($_GET['rows']))echo 3;else echo $_GET['rows']; ?>

Кроме того, важно отметить, что когда он у меня прямо в файле HTML, он отлично сохраняет PHP без кавычек, но в отдельном файле он дает мне следующую ошибку, если я убираю кавычки:

Uncaught SyntaxError: Неожиданный токен <

Поскольку файлы javascript не интерпретируются парсером php, по крайней мере, не по умолчанию

Patrick Evans 23.04.2018 00:28

Я думаю, вы обнаружите, что ваш HTML-файл на самом деле является файлом .php, верно?

Denno 23.04.2018 00:28

@Denno, вероятно, прав, но вы также можете настроить apache для компиляции php-кода в расширении html.

charlietfl 23.04.2018 00:30

@charlietfl Я чувствую, что это, вероятно, будет немного более продвинутым вариантом использования, который OP, вероятно, не использует. Однако, если сервер был настроен кем-то другим, это могло быть возможно

Denno 23.04.2018 00:31

@Denno согласен ... не является обычным явлением и является более сложной конфигурацией

charlietfl 23.04.2018 00:32

Да, это файл PHP, извините. Отредактирую вопрос.

Douglas Northwell 23.04.2018 00:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш сервер решает, что делать с запросом, в зависимости от его расширения (это чрезмерное упрощение, но пока подойдет).

Ваш сервер настроен на обработку файлов, заканчивающихся на .php, как файлов php. Это означает, что когда вы запрашиваете этот файл у Apache, Nginx или любого другого программного обеспечения веб-сервера, которое вы используете, ваш веб-сервер сначала запрашивает у программного обеспечения php разбирать и выполнять его. Когда программное обеспечение PHP выполняет первый код, оно запускает все, что находится между <?php и ?>. Затем он вернет результат выполнения кода на ваш веб-сервер, который вернет его клиенту.

Однако, когда ваш браузер загружает файл .js, ваш веб-сервер рассматривает его как «обычный» файл. Затем он прочитает файл и вернет его прямо клиенту, не передавая его сначала программному обеспечению PHP. Следовательно, ничего не будет выполняться или интерпретироваться, и вы просто увидите весь текст в файле.

Теперь предположим, что вы поместили код PHP в файл .js. Он не был выполнен, поэтому код PHP все равно будет присутствовать, когда ваш браузер получит ответ от веб-сервера. Затем ваш браузер попытается проанализировать и выполнить javascript в файле, но ваш тег <?php не является допустимым javascript. Поэтому попытка запустить этот файл вызовет ошибки в консоли вашего браузера.

Вы можете настроить, какие расширения следует рассматривать как код PHP в конфигурации вашего веб-сервера. Для Apache это делается через addHandler, а для nginx - через директивы местоположения. Я бы настоятельно не советовал менять это так, чтобы javascript обрабатывался как PHP, поскольку ваши файлы javascript не должны содержать PHP-код. Если вы хотите передать что-то в переменную, просто сделайте это в HTML-коде, созданном файлом PHP.

Я только что отредактировал свой вопрос. Это файл .PHP. Извините за путаницу.

Douglas Northwell 23.04.2018 00:46

Нет проблем, я обновил ответ, чтобы учесть это, а также выяснить, почему это вызывает ошибки в консоли вашего браузера. Если это ответ на ваш вопрос, отметьте его как ответ, поставив галочку рядом с ответом.

Bertware 23.04.2018 00:56

Другие вопросы по теме