эхо javascript из php не работает?

Итак, на html-странице я пытаюсь, чтобы php-сегмент повторил некоторый код javascript, как показано здесь:

<?php
    echo "This was legitimately hit";
    if(!empty($_POST['name']))
    {
        echo '<script type="text/javascript">alert("We got the name");</script>';
    }
    else
    {
        echo '<script type="text/javascript">alert("We DID NOT get the name");</script>';
    }
?>

и из того, что я прочитал в Интернете, это кажется законным способом ведения дел, но страница, кажется, читает первую часть до первого закрывающего шеврона (показанного чуть ниже здесь) в качестве комментария.

<?php
    echo "This was legitimately hit";
    if(!empty($_POST['name']))
    {
        echo '<script type="text/javascript">

Затем он считывает эхо else и next как обычный текст и помещает его на веб-страницу. следующий блок кода javascript затем читается как обычный блок кода javascript, поэтому на странице появляется всплывающее окно с сообщением, что имя не получено. Закрывающая скобка и закрывающий шеврон просто выводятся как дополнительный текст.

Итак, в конце концов страница просто заканчивается

alert("We got the name")'; } else { echo ''; } ?>

напечатано на нем в виде простого текста и имеет всплывающее окно с сообщением, что мы не получили имени.

Что здесь происходит не так?


person ZachLHelms    schedule 01.06.2012    source источник
comment
Я не думаю, что это настоящий код, за исключением того, что вы пишете код в среде, где теги html не разрешены - например, в редакторе html системы управления контентом.   -  person codingbiz    schedule 01.06.2012


Ответы (3)


Похоже, файл не обрабатывается как PHP. Имя файла заканчивается на .php? Вы уверены, что PHP установлен и правильно подключен к веб-серверу?

изменить: для обработки запросов Facebook на той же странице:

<?php

if (isset($_POST['facebook_request_field'])) {
  // handle the Facebook request, output any necessary response
  // then exit
  exit;
}

?>
<!-- display the web page normally here -->

Итак, для вашей тестовой страницы:

<?php

if (isset($_POST['name'])) {
  echo '<script type="text/javascript">alert("got a name!");</script>';
  exit;
}

?>
<script type="text/javascript">alert("No name.");</script>

(Это на самом деле идентично тому, что у вас уже есть, поэтому, возможно, я неправильно понимаю цель.)

person Dan    schedule 01.06.2012
comment
Ну, это все на html-странице. - person ZachLHelms; 01.06.2012
comment
php не будет выполняться на html-странице. Это должна быть php-страница (расширение файла php, а не html) для обработки php-кода. - person CM Kanode; 01.06.2012
comment
Серверы можно настроить для обработки страниц .html как php. @Zahel: проверьте, правильно ли работает какой-либо php, прежде чем устранять неполадки с javascript. - person Scott Saunders; 01.06.2012
comment
@ScottSaunders, он отлично работает на обычном php. - person ZachLHelms; 01.06.2012
comment
Под обычным php вы подразумеваете файл, оканчивающийся на .php? - person Dan; 01.06.2012
comment
@CMKanode, хорошо, значит, этот блок кода отлично работает в собственном php-файле. Итак, поскольку моя веб-страница находится внутри index.html и будет обрабатывать все сообщения, отправленные в этот каталог, как мне заставить ее пересылать все сообщения POST в отдельный файл php? - person ZachLHelms; 01.06.2012
comment
@ Дэн, да, это то, что я имею в виду. - person ZachLHelms; 01.06.2012
comment
Нет ничего плохого в наличии файла index.php, если сервер настроен на его распознавание (в Apache директива DirectoryIndex index.php). Файл HTML не сможет распознавать POST-запросы и обрабатывать их, они могут обслуживать только чистый HTML. - person Dan; 01.06.2012
comment
Итак, установка его как index.php — это нормально, но как мне заставить его загружать нужную страницу? (Да, я новичок в этом деле, извините за это) - person ZachLHelms; 01.06.2012
comment
Нам потребуются дополнительные сведения о цели сценария, прямо сейчас вы просто берете имя из формы и отмечаете это предупреждением JavaScript. - person Dan; 01.06.2012
comment
Хорошо, это кое-что, что я пытаюсь заставить работать для игры на Facebook, и она размещена внутри холста на одной из их страниц приложения. Адрес страницы холста должен быть индексом (something.com/index/), но они также отправляют подписанный запрос на эту страницу в сообщении POST. поэтому мне нужен этот индекс для обработки POST-сообщения, откуда я могу получить данные из него, но мне также нужно, чтобы он загружал веб-страницу. - person ZachLHelms; 01.06.2012
comment
Ну, использование заголовка, похоже, работает довольно хорошо. Я не получаю всплывающее окно, но я использую его в таком месте, что оно не могло бы перенаправить, если бы оно не попало. ( заголовок (расположение: something.com/index/game.html); ) - person ZachLHelms; 01.06.2012
comment
Здесь в комментариях сложно объяснить, я отредактирую свой ответ. - person Dan; 01.06.2012
comment
Зачем использовать isset, а не просто проверять саму переменную? - person ZachLHelms; 01.06.2012
comment
Если на страницу ничего не публикуется, $_POST будет пустым, а $_POST['name'] не будет существовать. isset() проверяет, существует ли переменная. empty() следует использовать для переменных, которые существуют, но которые вы хотите проверить как пустые, то есть пустой массив или пустую строку. - person Dan; 01.06.2012

Между We got the signed request и We got the name, я думаю, вы не предоставили нам фактический код, вызывающий ошибку. Дважды проверьте это и убедитесь, что перед вызовом alert у вас нет случайных одинарных кавычек.

person Scott Saunders    schedule 01.06.2012
comment
Как вы объясните разные строки? - person Scott Saunders; 01.06.2012
comment
Ах, я понимаю, что вы имеете в виду, подписанный запрос не должен был быть там, это должно было быть имя. Весь код здесь относится к одному и тому же коду, я просто случайно что-то перезаписал. - person ZachLHelms; 01.06.2012

Отсутствуют ; после alert. Вы пробовали исправить это в первую очередь?

person Gerard Yin    schedule 01.06.2012
comment
только что попробовал это, ничего не изменилось. Изменю исходный пост, чтобы отразить это. - person ZachLHelms; 01.06.2012
comment
это не должно мешать php печатать строку - person codingbiz; 01.06.2012
comment
это также не остановит запуск javascript - person Scott Saunders; 01.06.2012