【问题标题】:IE issue with a combination of taconite & ajaxForm with file upload将 taconite 和 ajaxForm 与文件上传结合使用的 IE 问题
【发布时间】:2013-05-27 01:11:45
【问题描述】:

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

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

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

这是来自 ajaxForm 调用的 sn-p -

成功:函数(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>

【问题讨论】:

    标签: internet-explorer file-upload ajaxform taconite


    【解决方案1】:

    唷 .. 这是我遇到过的最臭名昭著的 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 文本。 Thw 以下是所有的魔法 -

    var tc = new $.taconite(responseXML);
    

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

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

    谢谢。

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2016-01-03
      • 2010-12-18
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多