我有一个带文件上传的表单,下面是一个列出上传文件的网格。我正在使用ajaxForm(jquery.form.js)来执行ajax文件上传。为了响应成功的文件上传,我希望从服务器返回一个安全代码(我在服务器上创建它),后来作为参数传递,同时从Grid中的链接下载该文件。
如果文件上传不成功(即文件无效或文件过大)我将通知用户相同的内容。我使用taconite plugin作为相同的。成功上传将显示消息,然后调用函数以在网格中设置安全代码。如果不成功向用户显示消息并调用函数从Grid中删除上传条目(因为它不成功)
我有类似的从网格中删除fiel的机制 - 发送删除帖子请求($ .post(...))并从服务器返回taconite结果。这可以正常工作。但是.ajaxForm(带文件上传)无法按预期工作。
以下是ajaxForm调用的片段 -
成功:功能(responseXML,statusText,xhr,frm){...}
使用FF(Firefox)我不必担心任何事情 - 正确解析了taconite响应(来自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>
答案 0 :(得分:0)
Pheew ..这是我曾经遇到的最臭名昭着的IE v / s 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处理它v.well以防止上述代码在FF中执行我必须保留额外的IE特定检查。
我在IE7,8&amp; 9.希望这可以节省人们在类似的IE困境中的一些努力:)哦!如果有人找到更好的解决方案 - 我全都耳朵!
谢谢。