Выполнить функцию JavaScript из функции PHP - PullRequest
1 голос
/ 18 марта 2011

Я пытаюсь найти лучший и более чистый способ выполнения функции javascript, если существует сеанс PHP.

JS-script.js

  • содержит функцию javascript -> function doStuff () {// do stuff}

index.php

  • содержит файл js -> в голове
  • содержит класс PHP, который проверяет наличие $ _SESSION -> перед DOCTYPE

Пожалуйста, дайте мне знать (я использую PHP, javascript, jQuery).

  1. Лучший способ выполнить скрипт js, если существует $ _SESSION?
  2. Лучший способ остановить скрипт js, если $ _SESSION уничтожен?

Спасибо

Грег

Ответы [ 4 ]

5 голосов
/ 18 марта 2011
<head>
  <? if (session_is_registered('foo')) echo '<script>doStuff();</script>'; ?>
  ...
</head>

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

В качестве альтернативы у вас может быть что-то вроде session_verify.php , на которое вы можете сослаться в вызове AJAX, а затем "продолжить выполнение" / "stop" на основе ответа, который вы получите обратно.

Псевдокод:

if (ajax_response_from_session_verify() == still_logged_in){
  execute doSomething();
else
  stop doSomething();

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

1 голос
/ 18 марта 2011

У вас есть два варианта.

  1. Хранить функцию в отдельном файле и включать ее, только если установлен сеанс.
  2. Служит JS-файлу как PHP-файлу.Это позволит вам запускать команды PHP в вашем файле JS.Просто убедитесь, что ваш тип контента в порядке.
0 голосов
/ 18 марта 2011

Брэд прав, что вам нужно использовать PHP для вывода на страницу, поскольку вы не можете напрямую вызывать JS с сервера.

Альтернативой написанию тегов скрипта является размещение флага в HTML через PHP, а затем использование JavaScript для чтения этого флага. Например, вы используете jQuery, вы можете сделать что-то вроде этого:

<div id="sessionExists><?php if (isset($_SESSION['foo'])) echo 'true';?></div>

А в вашем jQuery:

var session = ($('#sessionExists').text() === 'true'))? true : false;

Теперь у вас есть переменная JS, которая содержит логическое значение для "sessionExists", которое вы можете запрашивать в сценариях JS и действовать соответственно.

0 голосов
/ 18 марта 2011
if(session is OK) {
    $script = "doStuff();";
}

затем в вашей HTML-главе:

<head>
...
<script type="text/javascript">
document.ready(function() {
<?php echo $script; ?>
});
</script>
...
</head>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...