0

我有一个带有文件上传的表单,在一个列出上传文件的网格下方。我正在使用 ajaxForm ( jquery.form.js ) 来执行 ajax 文件上传。为了响应成功的文件上传,我希望从服务器返回一个安全代码(我在服务器上创建它),稍后在从 Grid 中的链接下载该文件时作为参数传递。

如果文件上传不成功(即文件无效或文件过大),我必须通知用户。我也使用taconite 插件。成功上传将显示消息,然后调用函数在网格中设置安全代码。如果不成功向用户显示消息并调用函数以从网格中删除上传条目(因为它不成功)

我有类似的机制从网格中删除字段 - 发送删除帖子请求 ($.post(...)) 并从服务器返回 taconite 结果。这按预期工作得很好。但是 .ajaxForm(带文件上传)在 IE 中无法正常工作。

这是 ajaxForm 调用的片段 -

成功:函数(responseXML,statusText,xhr,frm){ ... }

使用 FF(Firefox),我不必担心任何事情 - 铁燧石响应(来自 responseXML)被正确解析。但是对于 IE responseXML 是 xml 对象。某些版本的 IE 提供来自 xhr.responseXML.xml 或 xhr.responseXML.text 或 xhr.responseXML.documentElement.textContent 的 xml 文本 - 但它并不一致。无论如何要获取xml文本?

除此之外,即使我在临时 div 中手动设置 xml 内容,它仍然不会调用/执行 taconite 插件操作!

我知道这听起来很复杂,但我得到的唯一线索是 ajaxForm + taconite + 文件上传存在问题。如果它不是文件上传,那么 taconite 将按预期对 IE 和 FF 执行(如我的删除文件功能)。如果您有任何我可以调整和尝试的建议,请分享!


这是返回的样品铁燧岩 -

<taconite>
<replaceContent select="#fileOprMsg">
<span id="oprResult">Operation was successful<span class="error"></span></span>
<script>$().ready(function () { showOprResult('#oprResult', 1); });</script></replaceContent>
<eval><![CDATA[ fileUploadResponse('dcrc%22uycok0lri%3d9%3a3g%3a6%3a%3b%2f7ehd%2f6chf%2f%3a6de%2fghgcg4c7dgh4%3dVtwg',true,-1); ]]> </eval>
</taconite>
4

1 回答 1

0

Pheew .. 这是我遇到过的最臭名昭著的 IE 与 FF 冲突之一,IE 不会放弃!我尝试了从尝试解析 xhr.responseXML 元素到将其内容动态分配给隐藏元素的所有方法,甚至尝试将其呈现为脚本,但都失败了。

最后,在令人沮丧的几天之后,我将精力转移到了实际的 taconite 插件文件并查看了它的脚本,试图找到一些我可以利用和宾果游戏的功能/方法!

我不知道这有多稳定/合法,但它对我有用-

$('#frmFiles').ajaxForm({
                dataType: 'xml',
        ...
        success: function (responseXML, statusText, xhr, frm) {
            ...
            /* FF gives xml string in - xhr.responseText */
            ...
            if (xhr.responseXML != null){
                var tc = new $.taconite(responseXML); // only for IE
            }
        ...
        });

我在这里所做的是使用 responseXML 显式初始化一个 taconite 实例,并向 taconite 插件致敬,该插件无需任何额外的规范即可处理 xmlObject 和/或 xml 文本。以下是所有的魔法 -

var tc = new $.taconite(responseXML);

请注意 - 这仅适用于 IE,FF 会很好地处理它,因此为了防止上述代码在 FF 中执行,我必须保留额外的 IE 特定检查。

我已经在 IE7、8 和 9 中对其进行了测试。希望这可以为处于类似 IE 困境中的人们节省一些精力:) 哦!如果有人找到更好的解决方案 - 我全神贯注!

谢谢你。

于 2013-06-10T07:36:26.437 回答