Перепутывание jQuery / PHP

#php #jquery

#php #jquery

Вопрос:

У меня есть следующая функция jQuery в моем PHP:

 echo ' 
function myFunction() {
    return $.ajax({
        type: "POST",
        url: "mypage.php",
        data: "name=Johnamp;location=Boston"
    });
}

$.when(myFunction()).then(function(data) {
     // handle data return
     someOtherFunction(data);

     // need to set "data" var into PHP SESSION


}, function(error) { 
     // handle ajax error.
});
';
  

После того, как мой AJAX выполняет majic, он возвращает значение (data), которое я передаю в другую функцию. Кроме того, мне нужно иметь возможность устанавливать это значение в сеансе PHP:
$_SESSION[‘project’][data] = данные;

Как мне это сделать? Переключение между PHP и JS по какой-то причине меня смущает…

Ответ №1:

Это невозможно, поскольку JS теперь находится на стороне клиента. Вы не можете устанавливать переменные PHP напрямую.

Что вы могли бы сделать, так это установить cookie в JS с помощью document.cookie , а затем на следующей странице запроса PHP может получить к нему доступ через $_COOKIE .

Вы также могли бы просто установить $_SESSION переменную внутри mypage.php — это может быть значительно проще, если они оба используют один и тот же сеанс.

Комментарии:

1. Вы абсолютно правы, я даже не думал об этом, но да, я могу установить СЕАНС на своей странице, где я обрабатываю AJAX-запрос.

Ответ №2:

Это сбивает с толку, потому что вы смешиваете два, постарайтесь сохранить четкое разделение в своем коде. Вместо того, чтобы повторять ваш скрипт jQuery, просто закройте тег php, это также заставит работать подсветку синтаксиса.

Что касается настройки переменных сеанса, вам нужно сделать это на стороне сервера в вашем mypage.php перед записью данных в выходные данные. Это произойдет перед передачей данных скрипту jQuery на стороне клиента для обработки.

Комментарии:

1. 1 Если бы вы организовали свой код лучше, следовать вашему коду было бы намного проще даже для вас. Вы также могли бы поместить свой Javascript в отдельный файл Javascript, это бы очень помогло (по крайней мере, в коде разработки, в производственном коде короткий Javascript может быть вставлен в HTML).

Ответ №3:

Прежде всего, вы должны знать, что javascript — это клиентский язык, а PHP — серверный. Все, что делает PHP, он делает при загрузке страницы и останавливается после загрузки страницы. Затем на смену приходит Javascript.

Что вы могли бы сделать, так это создать mypage таким образом, чтобы он также создавался $_SESSION['project']['data'] в виде ассоциативного массива, который вы можете использовать с PHP. Чего вы не пытаетесь сделать, так это установить массив javascript в переменную PHP. Не то чтобы это неправильно по умолчанию, но поскольку вы пытаетесь установить данные с помощью PHP, я предполагаю, что вы также получите данные с помощью PHP, таким образом, массив javascript в этом сеансе был бы бесполезен.

Итак, в mypage.php у вас, вероятно, есть что-то вроде:

 echo json_encode($result);
  

Где $result — массив данных, возвращаемый скриптом. Вы могли бы просто добавить одну строку выше, говоря:

 $_SESSION['project']['data'] = $result;
  

и сохраняйте данные, сохраненные в сеансе, для использования на других страницах.

Комментарии:

1. Да, перепрыгивание между клиентской и серверной сторонами всегда меня достает. Я воспользуюсь предложением @umbrae и помещу свой SESSION var туда, где я обрабатываю свой AJAX-запрос.