2013-03-15 105 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)); 
}