【问题标题】:pass a PHP object to an ajax PHP script将 PHP 对象传递给 ajax PHP 脚本
【发布时间】:2013-06-18 01:58:20
【问题描述】:

如何将在初始页面加载期间创建的 PHP 对象传递给 ajax 调用?

create-page.php 创建我的页面并有一个对象expensiveObject。我需要将expensiveObject 传递给ajax-some-stuff.php

选项 1:我是否应该 json_encode() 对象,将其附加到我的 URL,使用 javascript 获取我的 URL 的那部分,然后将其发送回 PHP ajax?

选项 2:我可以将其存储为 $_SESSION 变量吗?

【问题讨论】:

  • 如果它是一个标准类/匿名对象,如果它是一个自定义类对象,最好将其存储在会话中,只需确保在会话开始之前需要实现类的文件,或者有一个自动加载器在玩。
  • @MartyWallace - 在我的 ajax 脚本中,我有一些方法需要 $expensiveObject->someFunction() 的昂贵对象。
  • 我明白你的意思了。你不打算将它传递给脚本,你只需要在脚本执行时引用它。
  • @Orangepill 谢谢 - 自定义类与标准类是什么意思?
  • stdClass 对象是 php 通过某些原始方式创建的匿名对象,第二个参数没有 true 的 json_decode 是最常见的罪魁祸首之一。它将具有属性,但不会定义任何方法。自定义类是具有与之关联的实际类定义的类。如果您编写了我所说的自定义类。

标签: php javascript json oop serialization


【解决方案1】:

我会将其保存在 $_SESSION 中,因为这会阻止您通过 Internet 发送数据,这些数据应仅在服务器上处理。会有安全问题和性能问题。

您可能需要根据您的对象在$_SESSION 中实现__sleep()__wakeup()

【讨论】:

  • 当您发送到客户端时,关于线路性能和安全问题的 +1 优点。
【解决方案2】:

我想使用选项 1,但在 json_encode 函数之后,我将使用 base64_encode 再次包装它,因为 json_encode 仍然不是 URL 安全字符串。

$_SESSION 方法既好又简单,但取决于您的对象。如果我没记错的话,$_SESSION 可以存储最大大小的数据。 - 如果您是服务器端会话,您的服务器内存将被消耗 - 使用 cookie 作为会话替换会限制数据大小

【讨论】:

  • 我认为 URL 有类似的大小限制。大多数浏览器只能通过 GET 和 POST 请求处理最多 2000 个字符的 URL,我认为……Base64,json 编码的字符串可能会变得很长
猜你喜欢
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 2013-08-21
相关资源
最近更新 更多