2013-03-15 63 views
14

jQuery fileupload在IE 8和9中不起作用

此代码在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) 
+0

也许ID不传递到行动? – karaxuna 2013-03-15 06:20:41

+0

这就是破坏,但这在FF和铬中运行得很好。 IE获取500错误,该参数在预期为int时为空 – segFault 2013-03-15 14:38:27

+0

使用JS调试器时,可以在调用'.fileupload()'时检查'additionalParams'的值是否符合您的期望? (即在IE和FF/Chrome中相同) – millimoose 2013-03-17 20:08:53

回答

6

我能够通过包含jquery.iframe-transport.js得到它的工作,然后我不得不删除我的敲除“与”从数据绑定的div来让它在IE8中工作,因为它在IE9中工作。 (我有一个绑定以上我的发布代码)感谢所有的建议。

+0

帮了我很多,感谢发布 – 2013-09-19 12:40:17

1

由于这个函数是在FF工作正常,仅存在一个你在这里传递的变量的可能性是不确定的只是IE浏览器。

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

提示:IE对类型和一切都是严格的。

例如:

parseInt(Number); 

FF和铬假定它为十进制值,而IE假定它为八进制数。 因此,推荐使用parseInt(Number,10)

即使有关的日期,如果你提供

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

在Chrome和FF作品不错,但显示undefined或IE invalid Date

你可以找到更多关于日期here

所以推荐的符号,在上面的例子中,我只是想说你,你可能已经忘记了申报,或正确的符号

虽然这不是你要找的答案,但我希望这些信息能帮助你。

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

+0

我通过这个步骤,我的变量d是一个对象,并提供参数名称和值。该电话甚至没有被注册。这就像它不知道如何提交此表单。 – segFault 2013-03-20 02:39:54

+0

@segFault我希望您在IE控制台中检查每个变量值。并将这些变量结果与其他浏览器的控制台结果进行比较。我相信这会解决你的问题。 – 2013-03-20 04:05:58

+0

我是。在Firefox中,对象与IE中的对象相同,除了IE将对象作为数组在第一层使用FF。那个演示文稿是IE独特的东西,它们如何显示对象属性? – segFault 2013-03-20 04:34:51

-2

如果通过jQuery fileupload你的意思是使用http://blueimp.github.com/jQuery-File-Upload/,那么它明确表示在浏览器支持部分,IE 10+是他们实现的每个功能所必需的。

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

如果你的意思是另外一个插件,只是忽略我的意见。

+13

上传器的功能与IE6 +一起使用,一些特殊功能仅适用于IE10 +。我建议你重新阅读文档。 – 2013-06-13 19:43:38

0

只需将content-type设置为text/html并将其作为JSON发送即可。

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

0
  $("#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 +以上的测试和工作正常。 请确保使用正确的dataType:“json”(或数据类型:“json”),并确保您的Web服务方法的响应正确。 感谢

0

在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)); 
}