2013-05-31 35 views
0

我有一個帶有文件上傳的表單,下面列出了上傳文件的網格。我正在使用ajaxForm(jquery.form.js)執行ajax文件上傳。爲了響應成功的文件上傳,我期望從服務器返回的安全代碼(我在服務器上創建它),稍後將其作爲參數傳遞,同時從Grid中的鏈接下載該文件。帶有文件上傳的taconite和ajaxForm組合的IE問題

如果文件上傳失敗(即無效的文件或超大文件),我已經通知有關同一用戶。我使用相同的taconite plugin。成功上傳將顯示該消息,然後調用一個函數在網格中設置安全代碼。如果不成功顯示消息給用戶,並調用函數從網格中刪除上傳條目(因爲它不成功)

我有類似的機制從網格刪除場 - 刪除發佈請求發送($ .post(.. 。))和taconite結果從服務器返回。如預期的那樣工作正常。但.ajaxForm(帶文件上傳)不能像IE瀏覽器那樣工作。

下面是給ajaxForm通話的片段 -

成功:函數(responseXML的,狀態文本,XHR,FRM){...}

隨着FF(火狐)我不知道不得不擔心關於任何事情 - 對taconite響應(在responseXML)進行正確解析。 但用IE響應XML是xml對象。 IE的某些版本從xhr.responseXML.xml或xhr.responseXML.text或xhr.responseXML.documentElement.textContent提供xml文本 - 但它不一致。無論如何獲得XML文本?

除此之外還不會調用/執行鐵燧巖插件操作,即使我手動設置一個臨時DIV XML內容!

我知道這聽起來很複雜,但我唯一的線索是它有ajaxForm + 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

Pheew ..這一直是我有史以來所面臨的最臭名昭著的IE V/S FF的衝突之一,IE不會放棄!我嘗試了一切,從試圖解析xhr.responseXML元素動態地將其內容分配給隱藏元素,甚至試圖將其渲染爲腳本,但都失敗了。

最後,經過令人沮喪的日子我搬到了我的努力,以實際的鐵燧巖插件文件,並審查了其腳本試圖找到一些功能/方法,我可以利用和賓果!

我不知道如何穩定/法律,這僅僅是我的作品 -

$('#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和帽子一個鐵燧巖實例關閉的鐵燧巖插件它處理xmlObject和/或xml文本而沒有任何額外的規範。泰華下面做所有的魔法 -

var tc = new $.taconite(responseXML); 

心啊 - 這是僅適用於IE,FF處理它v.well因此要防止上面的代碼在FF我必須保持額外的IE專項檢查正在執行。

我測試過它在IE7中,8 & 9.希望這可以節省一些類似IE難題的人的努力:)哦!如果有人找到更好的解決方案 - 我全都是耳朵!

謝謝。