【问题标题】:php: pass large arrays of data through pagesphp:通过页面传递大量数据
【发布时间】:2009-11-11 16:35:11
【问题描述】:

我正在尝试解决一个需要将大量数据传递到另一个页面的问题,这是我的场景:

用户在表单中输入他/她的 gmail 登录信息,然后我将此信息发送到一个 ajax 页面,在该页面我进行身份验证并获取所有联系人,如果登录无效,他们可以重试,但如果它通过了身份验证,我需要将它们发送到下一页,在那里我解析所有电子邮件并检查它们是否与网站上的任何用户匹配。

方法一(没用):

将所有数据存储在会话中,这仅适用于数组较小的情况,因为会话有大小限制。

方法2(无效):

使用 javascript 添加隐藏输入,然后提交表单(也使用 javascript)。 事实证明,除非用户触发事件,否则您无法提交表单并返回 true(更改页面)。

那么我应该如何继续,如果 ajax 身份验证不起作用或者我的问题是否有一些解决方法,我应该跳过 ajax 身份验证并将它们发送回上一页吗?

【问题讨论】:

  • “事实证明,如果没有真正的用户点击,您将无法提交表单”我一直这样做 - 小心详细说明您的表单无法提交的细节javascript?
  • 我认为这是可能的,但我无法让它工作,所以我搜索了一个解决方案并找到了这个:stackoverflow.com/questions/645555/…

标签: php javascript jquery ajax session


【解决方案1】:

如果您无法使用 MySQL,为什么不将数据存储在数据库、MySQL 或 SQLite 中。在那里,您将存储链接到用户会话 ID 的数组的序列化版本。

我想到的 MySQL 表:

标识 | session_id |数据

http://php.net/manual/en/function.serialize.php 了解如何序列化您的数组。

【讨论】:

  • 这是个好主意。我想我会采用这个解决方案,它比再次从 web 服务获取数据要快。
  • 小心这种方法。当你有一个单一的数据库时它可以工作,但是如果你需要扩展它就不能可靠地工作。主数据库复制到从属数据库之间的延迟通常比页面加载之间的延迟更长。
【解决方案2】:

如果您能够在下一页上再次获取数据,则可以这样做,而不是在页面之间传递它。

【讨论】:

  • 通话通常需要 3-6 秒,所以我认为 x3ro 的解决方案将是最佳方式。
【解决方案3】:

由于您使用的是 jQuery,您可以直接提交数据或作为表单上的隐藏元素提交,而无需用户点击。假设第二次提交是通过 AJAX 你可以:

 $("#mydiv").load("secondpage.php", {email1: 'blah'}, function(){
   alert("Submitted everything nicely");
 });

【讨论】:

  • 这将禁用后退按钮,是否可以保留后退按钮并这样做?
  • 要在没有 AJAX 的情况下执行此操作,您可以使用 '$("form").submit()' 来完成完整的帖子。因此,您可以添加隐藏字段并从代码提交表单。
  • 那不行,我不能在没有用户点击的情况下触发提交功能。我在这里得到了确认:stackoverflow.com/questions/645555/…
  • 你想在onsubmit中做什么?据我了解,您无需用户点击即可提交表单,只是它不会触发 onsubmit 事件......这应该很容易解决。
  • 您可以提交表单,但所发生的只是您运行了提交功能,但它不会带您到任何地方。代码在 return true 后停止运行。
【解决方案4】:

取决于您的网络服务器,但会话变量通常没有大小限制。 Apache+PHP 你可以处理非常大的尺寸,而不是你应该关心 http://ca.php.net/manual/en/ini.core.php#ini.memory-limit。此外,PHP.ini 还带有 session.size 变量,您可以对其进行调整。我不确定它对您不起作用;你用了 $_SESSION,对吧?

最后,为了制作更好的持久性但快速(比数据库更快)的易失性存储,我建议使用 Danga's memcached. 它非常稳定,被广泛使用,并且为每种可能的语言风格提供了包装器。

【讨论】:

    猜你喜欢
    • 2012-04-25
    • 2012-10-21
    • 2022-01-26
    • 2013-07-16
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    相关资源
    最近更新 更多