【问题标题】:How can a form be submitted without POST data?如何在没有 POST 数据的情况下提交表单?
【发布时间】:2013-01-22 19:06:38
【问题描述】:

我遇到了一个我自己和在公司工作了 7 年以上的高级开发人员都无法解决的问题,所以我希望你们能提供帮助。 PHP 在提交表单后报告 $_POST 为空。尽管我们的大多数用户都使用带有 IE8 的 Windows XP,但值得注意的是,这种操作系统/浏览器组合是唯一遇到问题的组合。此外,我们每天有 125-150 次上传(主要使用 IE8),每周只有 3-5 个用户遇到问题。与我交谈的一位用户过去在同一台计算机上成功上传了多个文档而没有问题,但上周无法上传文档。

有没有其他人遇到过从 IE8 提交的表单不包含 POST 数据的问题?

我们公司在 jQuery UI 对话框中加载了一个上传表单,用于上传多个文件,带有一个基本的进度表和一个取消按钮。代码很长,分散在几个文件中,这就是为什么我现在选择不复制/粘贴它的原因,但我会尽力简要说明。

<div id="dialog_div">
<div id="form_container">
    <form>
    </form>
</div>
<div id="progress_div">
</div>
</div>

表单有五个文件输入和一个提交按钮,该按钮最初是禁用的,只有在选择了一个或多个文件时才启用。进度 div 被隐藏并显示表单,然后在提交时,表单被隐藏并显示进度 div。使用 setTimeout(),进度 div 每两秒刷新一次,以显示上传百分比以及取消按钮。我们正在使用 PHP 的会话上传进度来跟踪上传并检查它是否没有超过最大大小。如果它确实超过了最大大小,XHR 将在客户端中止。单击取消按钮运行相同的 JS 函数,该函数用于中止上传太大的文件。单击取消按钮时,接收表单的 PHP 脚本永远不会执行,因此我们的错误日志中不会显示任何内容。如果我们的进度脚本在 20 秒内没有找到有关上传的会话数据,上传也可能会中止。

令人困惑的部分是接收表单的 PHP 脚本在我们的日志中生成一个错误,该错误相当于“未收到表单”,因为 $_POST 为空。用户遇到问题的文件不会太大,我们的员工能够使用相同的文件并通过相同的界面为他们上传。当点击取消按钮时,脚本永远不会执行,所以我们认为上传被中止不是问题。

来自社区的想法?

【问题讨论】:

  • 归咎于比尔盖茨并继续前进?
  • 首先,您发布的表单代码太少,无法猜测。其次安装一个 http 嗅探器以查看发送到服务器的内容。最后按 f12 以查看控制台中的任何错误
  • 检查用户是否使用由 IEAK 修改的 IE8。我过去在 ajax 帖子方面遇到过问题,如果这确实是 ajax 上传的话。
  • 在 php 和 javascript 之间可能有大约 800-1000 行相关代码可以使这个页面正常工作(不包括构建类的自定义框架),我觉得发布有点过头了一切。在让每个人阅读一个小时之前,我希望能得到一些一般性的想法。
  • @Jack - 这值得一试 - 当您遇到问题时,问题是间歇性的,还是具有某些 IEAK 调整的用户永远无法成功提交?另外,是否有人知道一种方法(无需致电和询问 IT 部门)检测他们是否使用 IEAK 来管理 IE?

标签: php jquery-ui jquery


【解决方案1】:

我们突然遇到了类似的问题,文件上传失败率约为 3%。其他人都没有问题,只需选择客户即可。

问题是由于互联网连接不良和客户端超时造成的。因此,我们所做的就是用自定义的 plupload(http://www.plupload.com/) 实现替换所有内容。这样,文件在客户端被分成小块,然后在服务器上上传和重新组合。这为我们解决了问题,可能值得一试。

【讨论】:

  • 谢谢,bms,虽然我不确定这是否可行。对于文件分块,我们必须需要一个 3rd 方插件(flash/silverlight)或现代浏览器。不幸的是,IT 部门对升级 IE8 犹豫不决,更不用说允许他们的员工使用 Silverlight...
  • 可以理解。你总是可以祈祷奇迹哈哈。我会说 Plupload 确实也使用了 html4 版本,但它非常没用,但可能值得一看。
猜你喜欢
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2021-12-20
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
相关资源
最近更新 更多