【问题标题】:jQuery fileupload not working in IE 8 and 9jQuery 文件上传在 IE 8 和 9 中不起作用
【发布时间】:2013-03-03 18:51:11
【问题描述】:

此代码适用于 FF 和 chrome。在 IE 8 或 9 中,我收到一个 500 错误,指出非空属性为空。

这里是html

<div id="upload_button_div_general" class="fileupload-buttonbar" data-url="/Upload/SomeMethod">
    <label class="fileinput-button ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-primary" role="button"> 
        <span class="ui-button-text">
            <span>Add Documents...</span> 
        </span>
        <input id="upload_button" type="file" name="postedFiles" multiple="" />
    </label>
</div>
<div id="UploadMessage" data-bind="visible: showMessage"> 
    <span>Documents</span>

    <ul data-bind="foreach: upload()">
        <li> 
            <a href="#" data-bind="click: $parent.openFile">
                <span data-bind="text: $data.fileName">  </span>
            </a>
        </li>
    </ul>
</div>

这里是javascript

function Upload(div, additionalParams, successFunc, failureFunc) {
    $('#' + div).fileupload({
        dataType: 'json',
        url: rootPath + 'Upload/SomeMethod',
        formData: additionalParams,
        start: function (e, data) {
            showLoading();
        },
        stop: function (e, data) {
            hideLoading();
        },
        add: function (e, data) {
            data.submit();
        },
        always: function (e, data) {
            var result = data.result;
            if (result.HasError) {
                failureFunc(result.Error);
            } else {
                successFunc(result);
            }
        }
    });
};

控制器方法是

public virtual JsonResult SomeMethod(IEnumerable<HttpPostedFileBase> postedFiles, int id)

【问题讨论】:

  • 也许 id 没有传递给 action?
  • 这就是问题所在,但这在 FF 和 chrome 中运行良好。 IE 在期望 int 时得到参数为 null 的 500 错误
  • 使用 JS 调试器,你能检查你调用.fileupload()additionalParams 的值是否是你所期望的吗? (即在 IE 和 FF/Chrome 中相同。)
  • 您似乎正在使用 HMTL5 上传文件,并且 IE 浏览器 9、8、7 不兼容 HTML5,因此它们不支持该功能。
  • 是什么让我看起来像是在使用 HTML5?

标签: javascript jquery internet-explorer file-upload


【解决方案1】:

我能够通过包含 jquery.iframe-transport.js 来使其工作,然后我必须从 div 中删除我的淘汰赛“with”数据绑定,以使其在 IE8 中工作,因为它在 IE9 中工作。 (我在发布的代码上方有一个绑定)感谢所有建议。

【讨论】:

  • 帮了我很多,感谢发帖
【解决方案2】:

由于此函数在 FF 中运行良好,只有一种可能性是您在此处传递的变量仅针对 IE 未定义。

在 IE 控制台中检查每个变量的值。

提示:IE 对类型和所有内容都很严格。

例如:

parseInt(Number);  

FF 和 Chrome 将其假定为十进制值,而 IE 将其假定为八进制数。 所以,推荐给parseInt(Number,10)

即使是关于日期,如果你提供

var currentDate = new Date("March 18, 2013 11:13:00")

在 Chrome 和 FF 中运行良好,但在 IE 中显示 undefinedinvalid Date

您可以找到更多关于日期的推荐符号here

因此,在上面的示例中,我只是想告诉您,您可能忘记声明 type正确的表示法

虽然,这不是您要寻找的答案,但我希望这些信息对您有所帮助。

更新:由于错误是500 error,那么问题可能出在rootPath变量的值上。

【讨论】:

  • 我逐步完成了这个,我的变量 d 是一个对象,并且参数名称和值都提供了。该呼叫甚至没有被注册。就像它不知道如何提交这个表单一样。
  • @segFault 我希望您在 IE 控制台中检查每个变量值。并将这些变量结果与其他浏览器的控制台结果进行比较。我相信这会解决你的问题。
  • 我是。在 Firefox 中,对象与 IE 中的对象相同,只是 IE 将对象作为数组,而 FF 位于第一层。该演示文稿是 IE 独有的,它们如何显示对象属性?
  • @segFault 在您的代码中保留debugger。并转到 IE 开发工具中的script 选项卡。在开发人员工具右下角的文本字段中输入变量的名称。
  • 当我这样做时,它会显示 [[object Object]] { [0] : {...} } 我附上了当我将鼠标悬停在对象上时看到的图像
【解决方案3】:

只需将内容类型设置为 text/html 并将其作为 JSON 发送即可。

这应该适用于所有浏览器。

【讨论】:

    【解决方案4】:
                $("#txt1").fileupload({
                replaceFileInput: false,
                dataType: "json",        
                datatype:"json",
                url: "<%=Page.ResolveUrl("~/WebService/AddAttachment.ashx")%>",
                done: function (e, data) {
                    $.each(data.result, function (index, value) {
                 //You get the response data in here from your web service
                    })
                    $("#txt1").val("");
                }`enter code here`
            }); 
    

    这在 IE8 和 IE9 + 以上都经过测试并且工作正常。 请确保使用正确的数据类型:“json”(或数据类型:“json”),并确保您对 Web 服务方法的响应是正确的。 谢谢

    【讨论】:

      【解决方案5】:

      在 IE 上,如果您在上传文件时返回类似 json 的数据,您可以像这样获取此数据(json):

      done: function (e, datos)
      {
      try
      {
         //This in FF, Chrome, Safari
         data=eval(JSON.parse(datos.result));
      }catch (er)
      {
          //This in IE
          data=eval(JSON.parse(datos.result[0].documentElement.innerText));
      }
      

      【讨论】:

        【解决方案6】:

        如果 jQuery fileupload 是指使用 http://blueimp.github.com/jQuery-File-Upload/,那么它在浏览器支持部分明确指出,它们实现的每个功能都需要 IE 10+。

        https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support

        如果您指的是另一个插件,请忽略我的评论。

        【讨论】:

        • 上传器的功能适用于IE6+,一些特殊功能仅适用于IE10+。我建议您重新阅读文档。
        猜你喜欢
        • 2016-01-18
        • 2011-09-14
        • 1970-01-01
        • 2015-12-13
        • 2011-11-30
        • 1970-01-01
        • 2013-09-18
        • 2012-07-22
        • 1970-01-01
        相关资源
        最近更新 更多