Использование объектов в Ajax вызывает PHP-файлы

Я создал экземпляр класса в моем файле index.php . Но затем я использую jQuery Ajax для вызова некоторых файлов PHP, но они не могут использовать мой объект, который я создал в файле index.php .

Как я могу заставить его работать? Потому что я не хочу создавать новые объекты, потому что тот, который я создал, содержит все значения свойств, которые я хочу использовать.

Используйте сеанс для сохранения объекта для загрузки следующей страницы.

 // Create a new object $object = new stdClass(); $object->value = 'something'; $object->other_value = 'something else'; // Start the session session_start(); // Save the object in the user's session $_SESSION['object'] = $object; 

Затем на следующей странице, загружаемой из AJAX

 // Start the session saved from last time session_start(); // Get the object out $object = $_SESSION['object']; // Prints "something" print $object->value; 

Используя сеансы PHP, вы можете сохранять данные на многих страницах для определенного пользователя. Например, возможно, каждый пользователь имеет объект корзины покупок, который содержит список предметов, которые они хотят купить. Поскольку вы храните эти данные только в сеансе THAT USERS – каждый пользователь может иметь свой собственный объект корзины покупок, который сохраняется на каждой странице!

Другой вариант, если вы не хотите использовать сеансы, – это сериализовать ваш объект и отправить его через значение $ _POST в вашем вызове AJAX. Не самый элегантный способ сделать это, но хорошая альтернатива, если вы не хотите использовать сеансы.

Дополнительную информацию см. В разделе « Сериализация объектов» в документации.

мм, вы должны сохранить в сессии, $_SESSION["someobj"] = $myobj; , и убедитесь, что при вызове файла Ajax PHP это включает в себя класс необходимых файлов, который определяет класс $myobj и любой содержащийся в нем объект.

Не могли бы Вы уточнить? Я могу попробовать.

Так я создаю объект и назначаю его переменной сеанса:

 include(whateverfilethathastheclassorincludeit.php) $theObject = new TheObjectClass(); //do something with the object or not $_SESSION['myobject'] = $theObject; в include(whateverfilethathastheclassorincludeit.php) $theObject = new TheObjectClass(); //do something with the object or not $_SESSION['myobject'] = $theObject; 

Вот как я обращаюсь к членам объекта в моем PHP-файле Ajax-вызова:

 include(whateverfilethathastheclassorincludeit.php) $theObject = $_SESSION['myobject']; //do something with the object в include(whateverfilethathastheclassorincludeit.php) $theObject = $_SESSION['myobject']; //do something with the object 

Если вы не хотите перемещать свой объект, который находится в вашем index.php, попросите ajax сделать запрос index.php, но добавьте дополнительные параметры (post / get), которые позволяют вашему index.php знать, обрабатывать его как ajax и не возвращать ваш стандартный вывод html-страницы.

Вы не предоставили код, но я думаю, что вам нужно сделать свой экземпляр объекта глобальным для других скриптов, чтобы увидеть его, например:

 $myobject = new myobject(); 

Теперь я хочу использовать этот объект в другом месте, вероятно, под какой-либо функцией или классом или в любом месте, где он не распознается, поэтому я сделаю это глобальным с ключевым словом global, и он также будет доступен там:

 global $myobject; 

Когда у вас есть объект, вы можете поместить его в сеанс, а затем использовать его в файле сценария Ajax.

Как предполагали другие, $_SESSION – это стандартный способ сделать это, по сути, это была одна из причин того, что сеансы, придуманные для решения. Другие варианты, т.е. сериализация объекта, полагаются на стороне клиента, чтобы удерживать объект, а затем возвращать его без изменений. В зависимости от данных в объекте это не является хорошим решением, так как a) объект может содержать информацию, которая не должна быть доступна на стороне клиента по соображениям безопасности, и b) вам нужно будет проверить объект после его получения.

Тем не менее, если вы все еще хотите использовать объект на стороне клиента, то JSON – это опция для сериализации данных объекта, см. Функции JSON в PHP .

Основываясь на большинстве ответов здесь, ссылаясь на сохранение объекта в $ _SESSION, эффективнее ли хранить только отдельные свойства, которые необходимо получить в AJAX, в отличие от всего объекта, или это не имеет значения?

Например

 $_SESSION['object'] = $object; 

против

 $_SESSION['property1'] = $object->property1; $_SESSION['property2'] = $object->property2; 

Я знаю, что OP спрашивает о доступе ко всему объекту, но я думаю, что мой вопрос касается того, что это просто вопрос доступа к определенным свойствам объекта и не нуждающийся в доступе к методам класса для изменения объекта, когда он находится в AJAX ,