【问题标题】:PHP / JavaScript: Calling a PHP Class via AJAX. Multiple Instances of the PHP ClassPHP / JavaScript:通过 AJAX 调用 PHP 类。 PHP 类的多个实例
【发布时间】:2016-06-30 00:13:19
【问题描述】:

也许这是一个愚蠢的问题。但无论如何,这是我的问题。我的项目中有多个课程。

一开始调用了Calculate($param1, $param2...)类的构造函数。

这个Calculate类通过jQuery事件(点击,改变..)多次调用,具体取决于填充的新表单字段。价格和价值由php在后台计算,并通过AJAX在网站上表示(边打字边直播)。

AJAX 和 Calculate 类之间的连接是单个文件 (jsonDataHanlder),此文件从 AJAX 接收 POST 值并返回网站输出的 JSON 字符串。所以每次我调用这个 jsonDataHandler 时,都会创建一个新的 Calculate 对象。使用更新的值,但绝不是第一个创建的对象。正如您所想象的那样,我现在遇到了多个问题。

如何在不创建新对象的情况下始终访问同一个对象?

编辑:由于技术原因,我不能使用会话..

【问题讨论】:

  • 你是说你需要保存第一个实例化对象的信息吗?
  • 是的.. 完美的情况是创建一次对象,然后通过 ajax 调用设置值。
  • 然后将其保存在 $_SESSION 中。
  • 哦,我忘了。我不能使用会话。不是因为我不知道,而是因为会话导致与我们的在线商店系统发生冲突.. 所以会话不是一个选项:(

标签: php jquery json ajax oop


【解决方案1】:

这是 php 应用程序的生命周期:

  • 浏览器向网络服务器发送一个 http 请求
  • Web 服务器(例如 Apache),接受请求并启动您的 php 应用程序(在本例中是您的 jsonDataHandler 文件)
  • 您的 php 应用程序处理请求并生成输出
  • 您的 php 应用程序终止
  • Web-server 将 php 应用程序生成的响应发送到浏览器

所以应用程序在每个请求结束时“死掉”,您不能创建将在请求之间持续存在的对象。

可能的解决方法:

  • 将数据保存在服务器上 - 使用会话或数据库(正如您所说,这不是您的选择)
  • 将数据保存在客户端 - 您仍会为每个请求创建对象,但您会在客户端保留其他信息,以便能够恢复对象的状态(请参阅下文中的更多信息)
  • 使用reactphp 之类的东西让您的应用程序持续运行(这也不是一个选项,因为您需要使用不同的环境)。此选项的变化 - 切换到另一种不会每次都重新启动服务器端应用程序的技术(node.js、python+flask 等)。

所以,如果不能将数据持久化到服务器上,相对简单的选择就是将数据持久化到客户端。

但这只有在您需要为每个单独的客户端保留计算器的状态时才有效(相对于为所有客户端保持相同的状态,在这种情况下您确实需要在服务器上保存数据)。

客户端状态的流程可以是这样的:

  • 客户端发送第一个计算请求,例如param1=10
  • 您的脚本以value=100 响应
  • 客户端代码将 param1=10param1_value=100 存储到 cookie 或浏览器本地存储中
  • 客户端发送下一个计算,例如param2=20,这一次客户端代码找到之前的结果并将所有内容一起发送(param1=10&param1_value=100&param2=20
  • 现在,您可以在服务器上重新创建整个计算序列,这样您就可以获得与永久Calculate 对象相同的结果

【讨论】:

  • 非常感谢这个非常好的解释。我想我将不得不走 cookie 的方式.. 我会试一试。
  • @MarLon 你的意思是提交到服务器吗?不是必须的,可以在js代码中设置/获取cookies,查看this或者this
  • 哦,这看起来很有趣。我想我需要一个表单提交来获取和设置新的 cookie 数据。
【解决方案2】:

也许您应该尝试将计算对象的参数值保存在数据库中,并且每次进行 AJAX 调用都会从数据库中获取最新值。

【讨论】:

  • 这也不是一个选项。此脚本生成商店文章。大约 1000 / 天.. 总是在表格上进行更新会很麻烦.. 那么,我的想法没有错误吗?我的意思是没有办法在 PHP 对象上创建并一直使用它吗?
  • 在客户端和服务器通信时(据我所知)跟踪信息的唯一方法是使用会话或 cookie 或将信息存储在数据库中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
相关资源
最近更新 更多