如何在没有POST数据的情况下提交表单?

时间:2013-01-22 19:06:38

标签: php jquery-ui jquery

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

是否还有其他人在IE8中提交表单提交时遇到问题?

我们公司在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为空。用户遇到问题的文件不是太大,我们的员工可以使用相同的文件和相同的界面为他们上传文件。单击取消按钮时,脚本永远不会执行,因此我们认为上传中止不会出现问题。

来自社区的想法?

1 个答案:

答案 0 :(得分:2)

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

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