Функция javascript работает некорректно

У меня есть эта маленькая функция

function makewindows(){
child1 = window.open ("about:blank");
child1.document.write("<?php echo htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");
child1.document.close(); 
}

Что бы я ни пробовал, просто выводит код php как источник html, а не результат кода php. Раньше это работало нормально, и я не уверен, что я изменил, чтобы привести к такому поведению.

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

function updateByQuery(layer, query) {
   url = "get_records.php?cmd=GetRecordSet&query = "+query+"&sid = "+Math.random();
   update(layer, url);
}

Пара вопросов: что именно вы изменили между последним разом, когда это работало так, как вы ожидали, и первым разом, когда он сломался? Как / где этот скрипт включается в файл? Это PHP, включенный в тег скрипта или тег скрипта с атрибутом src?

Matt Kantor 16.12.2008 04:42

Файл включен в тег скрипта. Я изменил вещи, относящиеся к приложению ajax, например, другие методы javascript в файле.

user1253538 16.12.2008 13:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
213
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Этот код должен находиться в файле, который анализируется PHP перед отправкой в ​​браузер. Убедитесь, что у него есть расширение «.php» (или что Apache / (или другое) настроен на установку любого расширения, которое он использует, через PHP). Также убедитесь, что PHP установлен правильно и работает.

Этот файл JavaScript включен в index.php и раньше работал нормально. Остальные функции javascript и файлы php работают нормально.

user1253538 15.12.2008 15:26

Вы недавно переместили этот файл из анализируемого файла PHP (например, .phtml / .php) в файл .js? Обратите внимание, что любой PHP, который вы ожидаете выполнить, должен быть проанализирован синтаксическим анализатором PHP перед доставкой клиенту. Если бы он был изначально в файле .php, он был бы проанализирован / выполнен и работал нормально.

Однако по умолчанию файлы .js не анализируются PHP. Возможно, когда-то они были, но администратор вашего сервера недавно что-то обновил и потерял такое поведение? Вы можете использовать локальный файл конфигурации (в Apache, .htaccess), чтобы снова включить его.

он всегда был в файле .js, который был загружен из файла php, который не изменился.

user1253538 15.12.2008 15:32

Тогда мои деньги твердо вложены в недавнюю реконфигурацию вашего администратора, предотвращающую синтаксический анализ файлов .js с помощью PHP.

Adam Wright 15.12.2008 15:37

Да, проблема в том, что он не разбирается.

some 15.12.2008 15:44

Я администратор и ничего не менял.

user1253538 15.12.2008 16:10

Убедитесь, что вы запускаете страницу с веб-сервера. вроде такой: http://localhost/yourpage.php а не напрямую из самого файла вот так: file://yourpage.php

файл определенно обслуживается

user1253538 15.12.2008 15:31
Ответ принят как подходящий

Я предполагаю, что он все еще находится в файле, который анализируется PHP, как уже говорили другие. Тогда, вероятно, что-то выше этого фрагмента кода сбивает с толку php-parser, поэтому он не распознает php-тег.

Чтобы проверить это, попробуйте вывести что-нибудь еще перед этой функцией, возможно, просто комментарий или что-то в этом роде.

Также используйте «var» перед client1, иначе client1 будет в глобальной области.

обновление 1 Поскольку вы пытались вставить фрагмент php-кода, и он сломался, проблема в том, что сервер не разбирает файл должным образом.

Чтобы проверить, действительно ли сервер анализирует ваши файлы .js (я считаю, что это не настройка по умолчанию), создайте новый файл: test.js

<?php echo "This is a test"; ?>

Откройте в браузере файл test.js и посмотрите исходный код страницы. Если у него есть теги php, ваш сервер не анализирует файлы .js.

обновление 2 Если php работает в файлах .js, попробуйте переписать функцию следующим образом (извините, я не тестировал это, потому что у меня сейчас нет доступа к php-серверу)

<?php    
echo "function makewindows(){var child1 = window.open (\"about:blank\"); " .
"child1.document.write(\"" . htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES) . "\");" . "child1.document.close(); }";    
?>

Похоже, вы просто поместили туда предупреждение, для этого вам нужно использовать php. как <? php echo "alert ('php test');" ?>

some 15.12.2008 15:40

Проблема НЕ в javascript, потому что javascript не анализирует php. Проблема в том, что по какой-то причине ваш php-парсер на сервере не разбирает php должным образом.

some 15.12.2008 15:42

Сейчас у меня нет доступа к php-серверу, поэтому я не могу протестировать код.

some 15.12.2008 15:42

Добавление предупреждения PHP определенно нарушает его и вызывает ошибку в ссылке, которая вызывает функцию выше makewindows. Я вставлю этот код сейчас.

user1253538 15.12.2008 15:46

Код PHP анализируется и запускается на сервере, а javascript - на клиенте. Если клиенту приходит php-код, значит, сервер не проанализировал PHP ...

some 15.12.2008 15:50

какой-то код php работает, но не код php в makewindows

user1253538 15.12.2008 16:11

кажется, что после updateByQuery возникла проблема, поскольку запрос, который является функцией php, передается нормально, но что-либо после, например, makewindows, не выполняется.

user1253538 15.12.2008 16:32

Похоже, что-то сбивает с толку php-parser ... Несколько лет назад у меня была аналогичная проблема с другим языком. Тогда это произошло из-за открытой цитаты или из-за того, что я раньше вставлял какие-то странные символы, которые не нравились парсеру.

some 15.12.2008 16:56

Вы можете попробовать решить проблему так: создайте новый файл, добавьте в него фрагмент php-кода и проверьте, что он работает. Затем скопируйте часть за частью из исходного файла в новый и посмотрите, где она перестает работать.

some 15.12.2008 16:58

Кажется, что переменные, переданные с php, без проблем получаются, но не анализируются php. Остальная часть сайта - это файлы .php и нормально разбирается.

user1253538 15.12.2008 17:17

Вы хотите сказать, что файлы «* .php» анализируются, но не «.js»?

some 15.12.2008 17:34

да, файлы .js передаются как javascript. Я думаю, что эта проблема не имеет ничего общего с конфигурацией сервера, так как это easyphp и не изменилось, изменился только файл

user1253538 15.12.2008 18:00

Просто для удовольствия измените имя на something.php и просмотрите файл в своем браузере, чтобы убедиться, что он правильно проанализирован.

some 15.12.2008 18:22

да, он отлично работает, если я это сделаю, источник показывает содержимое artcile_desc

user1253538 15.12.2008 18:52

Отлично. Теперь вам нужно настроить свой веб-сервер для анализа файлов .js. Я не вижу, чтобы вы указали, на каком веб-сервере или какой платформе вы находитесь. Один из способов - использовать файлы .htaccess, и, возможно, вы случайно удалили тот, который у вас был.

some 15.12.2008 19:12

Обычно файл .htaccess скрыт, поэтому, если вы скопировали файлы из одного места в другое, вы могли пропустить этот файл конфигурации.

some 15.12.2008 19:14

На данный момент я использую easyphp для Windows. Я до сих пор это проблема в коде, так как я не касался конфигурации сервера, а php в javascript раньше работал нормально.

user1253538 15.12.2008 19:27

Поскольку он работает, если он у вас как «.php», а не когда он у вас как «.js», все в порядке с файлом, но с конфигурацией вашего сервера. Я не знаком с easyphp, но, поскольку он использует apache, это не должно быть большой проблемой.

some 15.12.2008 19:55

Выполните поиск по запросу "apache php parse", и вы получите несколько предложений

some 15.12.2008 20:02

eaysphp автоматически проанализирует php в javascript. Это определенно проблема с моим кодом, и я отредактировал свое сообщение, чтобы показать весь код. Изменение конфигурации, чтобы гарантировать, что .js анализируется, ничего не исправило.

user1253538 16.12.2008 13:49

Я не уверен, что это поможет, но лучшие практики диктуют, что всякий раз, когда вы пишете в новое окно с помощью JavaScript, вы должны открывать и закрывать документ. Вы можете это попробовать?

function makewindows(){
  var child1 = window.open ("about:blank");
  child1.document.open();
  child1.document.write("<?php echo htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");
  child1.document.close(); 
}

@cLFlaVA: Проблема в том, что код PHP не анализируется, и это не зависит от того, открыт документ или нет. Но хорошо, что вы на это указали. Хотели бы вы отредактировать свой ответ и поставить «var» перед первым «child1», чтобы переменная стала локальной, а не глобальной?

some 15.12.2008 16:52

Хорошая точка зрения; спасибо :) Хотя, исходя из небольшого фрагмента кода, предоставленного OP, child1 май был объявлен глобально по какой-то причине.

cLFlaVA 15.12.2008 20:01

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