【问题标题】:Best way to post files asynchronously with ExtJS使用 ExtJS 异步发布文件的最佳方式
【发布时间】:2026-01-19 20:50:01
【问题描述】:

我基本上有一个用户填写的表格,其中也可以附加文件。它实际上相当于gmail:在您还在表单中输入信息时发送文件,当您点击最终提交按钮时,它会等待文件全部传输并提交最终字段。

我的问题是在此过程中提交这些文件。我的第一个想法是首先为每个添加的文件创建一个新的 FormPanel,以便能够使用 POST Ext.Ajax.request 发送它们。不幸的是,我们不能在表单中嵌入表单(我有点认为 ExtJS 会以不同的方式处理这个问题,但我试过了,但事实并非如此)。

我在 Internet 上看到一些控件使用一些 Flash 来执行此操作,但这不是我想要的方式。我想像谷歌那样做!除了有一个进度条,这是一个很好的功能,但它不是强制性的 :) 感谢您的帮助!

【问题讨论】:

  • gmail不使用flash上​​传器吗?
  • 那么,你的问题是每个文件都是同步上传的吗?并且您希望每次上传都异步进行?
  • 为什么需要额外的表单来发出 AJAX 请求?只需使用名称数组即可。

标签: javascript ajax post file-upload extjs


【解决方案1】:

简答:不要嵌套表单,将它们并排放置(甚至动态创建)。

更长:

当您考虑它时,您正在做一些不是原子操作的事情。 上传文件和在表单上发布数据(从技术上讲)是 2 次不相关的交易。 你提供它们之间的事务上下文,就像 gmail 一样:你创建一个“草稿”对象,上传文件说它们属于这个草稿,最后发布其余的表单数据并将草稿最终确定为一个完全构造的对象。

当然,你必须管理这一切,但这不是手头的问题。

重点是:根据我上面描述的“原子性”对 UI 进行分区。 不要将“文件上传”和“最终提交”的操作混在同一个 HTML Form/Ext FormPanel 中。 (您仍然可以使其在视觉上与用户的概念 UI 相同)。

您可以使用临时创建的表单为文件上传执行“Ext.Ajax.request”。

您可以查看 Saki 的示例 here

希望这会有所帮助:-)

【讨论】: