Передача переменных между модулями PHP, загруженными с помощью jQuery - PullRequest
0 голосов
/ 15 марта 2011

Я использую jQuery для загрузки модуля PHP в «отложенном» режиме, однако загруженный модуль jQuery не может получить доступ к переменным «основного» модуля PHP.Похоже, он не может получить доступ к переменным сеанса тоже.Есть ли простой, быстрый и безопасный способ добиться этого?

Этот код используется для загрузки "отложенной" страницы:

<script type="text/javascript">
    jQuery.noConflict();
    jQuery("#sidebarfeat").one('inview', function(event, isInView, visiblePartX, visiblePartY) {
        if (isInView) {
            // element is now visible in the viewport
            jQuery("#sidebarfeat").load("/wp-content/themes/tgv1/featured.php", "",
            function(responseText, textStatus, XMLHttpRequest) {
                if(textStatus == 'error') {
                    jQuery('#sidebarfeat').html('There was an error making the AJAX request');
                }});

          }
        });

</script>

В приведенном выше коде используется плагин jQuery inview, однакопроблема заключается в среде PHP, похоже, что 2 модуля PHP работают в «отдельных» средах ...

Ответы [ 3 ]

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

PHP не поддерживает состояние между несколькими запросами.Это означает, что автономный PHP не может хранить переменные в памяти между запросами.Сеансы сохраняются на диск (по умолчанию), файлы конфигурации должны быть повторно проанализированы и т. Д.

Если вы хотите сохранить переменные между двумя запросами, вы можете использовать сеансы илиjson_encode() ваших переменных и повторите их через jQuery.

В отношении сервера ваш XHR-запрос такой же, как если бы вы запрашивали страницу в браузере.Это совершенно другой запрос.

Что касается невозможности доступа к переменным сеанса, вам необходимо убедиться, что вы вызываете session_start() (возможно, с правильным session_name() звоните раньше, посмотрите на свои куки, чтобы выяснить это) в вашем извлеченном скрипте.


РЕДАКТИРОВАТЬ: Используя json_encode()относительно легко.Сначала подготовьте все переменные, которые вы хотите передать в ассоциативный массив, затем вызовите json_encode().

$myVars = array();
$myVars['important'] = 'very';

$myJsVars = json_encode($myVars);

Затем, в вашем <head>, присвойте $myJsVarПеременная JavaScript.

<script>var PHP_VARS = <?php echo $myJsVars; ?>;</script>

Когда вы вызываете .load в jQuery, передайте вашу переменную в качестве второго параметра.

<script type="text/javascript">
    jQuery.noConflict();
    jQuery("#sidebarfeat").one('inview', function(event, isInView, visiblePartX, visiblePartY) {
        if (isInView) {
            // element is now visible in the viewport
            jQuery("#sidebarfeat").load("/wp-content/themes/tgv1/featured.php", PHP_VARS,
            function(responseText, textStatus, XMLHttpRequest) {
                if(textStatus == 'error') {
                    jQuery('#sidebarfeat').html('There was an error making the AJAX request');
                }});

          }
        });

</script>

featured.php теперь сможет получить доступ к этим переменнымчерез $_GET.

0 голосов
/ 15 марта 2011

Вы всегда можете передать соответствующие данные с помощью параметра data: метода .load(). Просто поместите значения в массив и сериализуйте массив в строку.

0 голосов
/ 15 марта 2011

Вы можете попытаться передать ваш session_id() в AJAX, называемый script.Конечно, текущие переменные никогда не будут доступны в другом процессе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...