gpt4 book ai didi

xml - GWT 和 Sencha GXT : FormPanel result fails

转载 作者:数据小太阳 更新时间:2023-10-29 02:41:53 26 4
gpt4 key购买 nike

TL/DR:如何通过 FormPanel 加载 XML 响应可靠吗?


我们在 GWT 中有一个 Web 应用程序,其大部分 UI 使用 Sencha GXT。我们使用 GXT FormPanel将文件上传到服务器端脚本(它只是回显文件的内容)以在 JS 中获取本地文件的内容。最终这可以通过 FileReader 完成,但显然不能在不支持它的浏览器中完成。

FormPanel提交其表单并将结果加载到一个隐藏的 IFrame 中,使用以下代码片段(来自 FormPanelImpl.class)从中提取内容:

try {
// Make sure the iframe's window & document are loaded.
if (!iframe.contentWindow || !iframe.contentWindow.document)
return null;

// Get the body's entire inner HTML.
return iframe.contentWindow.document.body.innerHTML;
} catch (e) {
return null;
}

我们正在以这种方式加载 XML 文件,有问题的行是

return iframe.contentWindow.document.body.innerHTML;

因为在少数情况下 XML 是作为 XML 加载的(因此没有嵌入到 HTML 包装器中)。我尝试了以下方法:

  1. 我用了Content-Type: text/html最初(在本地 PHP 测试脚本中的监督,我在生产代码中的部分错误)。在 Firefox 和 Chrome 中工作,但不在 IE (9) 中工作,在 IE (9) 中,XML 在 IFrame 中作为 XML 加载。
  2. Content-Type: application/xml这对于有效载荷来说是正确的。现在它在任何地方都不起作用,因为我们现在得到了最初只有 IE 在 Chrome 和 FF 中表现出来的行为。
  3. Content-Type: application/octet-stream : 这不是个好主意,它只是下载文件。
  4. Content-Type: text/plain : 我希望这会始终触发 HTML/body 包装,它确实会触发,但它也会将所有内容包装在 pre 中。元素所以它现在到处都失败了,但至少可靠。太好了。

经过一番挖掘,我发现显然是 GXT FormPanel使用相同的 FormPanelImpl来自 GWT,因此两者的结果无论如何都是相同的。 GWT 的文档说(Sencha 明智地隐瞒了这一点):

The back-end server is expected to respond with a content-type of 'text/html', meaning that the text returned will be treated as HTML. If any other content-type is specified by the server, then the result html sent in the onFormSubmit event will be unpredictable across browsers, and the FormHandler.onSubmitComplete(FormSubmitCompleteEvent) event may not fire at all.

但是,即使发送 text/html如果负载是 XML,则行为在浏览器中是不可预测的。

有通用的解决方案吗?还是我遗漏了一些非常微不足道的东西(我现在只看了 GWT 三天)?

编辑: 我尝试在 <html><body> 之前添加到文件内容,这样即使 IE 也会在 IFrame 中有一个正文。好吧,确实如此,但它也导致了一个非常非常奇怪的 innerHTML开始于:

<?XML:NAMESPACE PREFIX = [default] ...

XML 解析器可以理解地窒息。

最佳答案

我的猜测是,一般来说,将 XML 包装在 HTML 上下文中而不对特殊字符执行任何转义操作并不可靠。我希望它至少在像

这样的 XML 文档中失败
<a>
<b>
<html>
</html>
</b>
</a>

我们采用的方法是只发回一个小的“OK”消息,然后使用一个单独的请求从服务器获取(缓存的)内容。

或者,它可能会执行 HTML 编码/解码(或 Base64,...)

关于xml - GWT 和 Sencha GXT : FormPanel result fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11260450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com