【问题标题】:Jquery AjaxForm returning False in OPERA in a https protocolJquery AjaxForm 在 https 协议中的 OPERA 中返回 False
【发布时间】:2010-06-18 07:51:31
【问题描述】:

该错误仅在我添加文件输入时显示。我在成功事件中返回 FALSE。仅在 Opera 中发生。

知道哪里有问题吗?

http://jquery.malsup.com/form/

【问题讨论】:

    标签: jquery opera ajaxform


    【解决方案1】:

    jQuery 创建一个隐藏的 IFRAME 来提交表单,因为这是以 AJAXy 方式处理文件上传的唯一方法。

    问题的根本原因是当一个空的 iframe 被插入到文档中时 Opera 会触发 onload。 jQuery 脚本没有预料到这个初始的 onload 事件,认为提交表单已经完成,并得出没有成功的结论。它在 http 上不会那么容易发生的原因可能与 Opera 必须加密文件上传有效负载时的时间不同有关。

    如果插入 IFRAME 的同一脚本也启动了将文档加载到 IFRAME 中,则其他浏览器将等到加载文档完成加载并仅触发一个加载事件。 (或者类似的东西 - 在这种特定情况下,启动文档加载的脚本是从超时运行的,所以它甚至不是同一个脚本)。

    我建议的解决方法是增强针对此问题已经存在的解决方法尝试:

    if (!isXml && (doc.body == null || doc.body.innerHTML == ''  )) 
    

    并在 if 语句中检查 IFRAME 中文档的 URL 是否仍然是初始 javascript:false :

    if (!isXml && (doc.body == null || doc.body.innerHTML == '' || doc.URL=='javascript:false' )) 
    

    这应该足以确保 jQuery 等待新文档完成加载。

    【讨论】:

    • (顺便说一句,如果您可以将此建议向上游推送给该脚本的维护者,那就太好了。)
    【解决方案2】:

    迁移到 jQuery 1.5 和最后一个 jQuery 表单插件 (2.63) 后,我的问题似乎得到了解决

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2012-09-25
      • 2011-02-14
      • 2016-12-12
      • 2010-12-24
      • 2011-02-05
      相关资源
      最近更新 更多