2013-03-29 62 views
0

我很新的JavaScript,我一直在尋找解決這個問題的全天。我發現很多問題/答案,但沒有任何工作。jQuery AJAX成功回調沒有在IE觸發

我有了一個文件上傳中有一個頁面,我想通過一個服務器端驗證程序來運行這個文件,然後在頁面上顯示的驗證結果。除了IE瀏覽器之外,我的這項工作非常出色(Safari,Chrome & Chromium,Firefox)。

爲了使文件上傳在IE上運行,用戶需要通過提交按鈕提交表單。所以我使用HTML中的條件註釋將其添加到頁面上。在JavaScript中,我使用了我在這裏找到的IE檢測功能。這部分工作正常。

下面是使AJAX請求的功能:

function handleUpload() 
{ 
    showSpinner(); 

    var dFile = new FormData(document.getElementById("devConsValidate")); // this works in IE but only if called by a submit method 

    $.ajax(
    { 
     cache: false, 
     async: false, 
     url: 'validator.php', 
     type: 'POST', 
     data: dFile, 
     dataType: 'JSON', 

     processData: false, // this is key for formdata 
     contentType: false, // so is this 

     success: function(response) 
     { 
      var result = response.result; 
      var validationCode = response.validation_code; 
      var errors = response.errors; 

      var htmlCode = '<h2>'; 

      if (result == 'SUCCESS') 
       htmlCode += '<font color="green">'; 
      else 
      { 
       htmlCode += '<font color="red">'; 
      } 

      htmlCode += 'Validation ' + result + '</font></h3>'; 

      if (result == "FAIL") 
      { 
       htmlCode += '</center>'; 
       for (var i in errors) 
        htmlCode += errors[i] + '<br>'; 

       htmlCode += '<br><a href="validator_help.php">Validator Help </a>'; 
      } 
      else 
      { 
       htmlCode += 'Please use the following code when submitting your request.<br><br><font color ="#00aa54" size="+2">' + validationCode + '</font>'; 
      } 

      // make some beautiful html 
      $('#resultsArea').html(htmlCode); 
     }, 

     error: function (XMLHttpRequest, textStatus, errorThrown) 
     { 
      alert('error: ' + errorThrown); 
     } 
    }); 
} 

功能handleUpload()被調用位於文件改變事件或表單上被提交。 validator.php返回一個json_encoded數組值。

問題當使用IE瀏覽器,阿賈克斯成功回調從來沒有發射,瀏覽器只顯示空白頁上生JSON字符串,所以Ajax調用工作並返回預期的數據是。在其他瀏覽器上,成功回調會觸發並解析json,並將適當的代碼插入到頁面上的div中。

的完整JavaScript文件:http://pastebin.com/G9MYBis5

任何想法?

+0

你應該指定IE的版本...... – maxedison

+0

@maxedison只有IE10有FormData – Musa

+0

如果你的表單提交了,那意味着你的某個地方提交處理程序時發生錯誤。 – Musa

回答

2

OK,所以我的解決辦法是讓這條線在我的頭標記的第一行:

<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

這引起了IE10的工作,爲IE9和下面我不得不讓靜態的頁面,因爲我能夠在不使用FormData的情況下上傳文件,只需從基本的html表單提交而不是AJAX即可。爲此,我爲IE用戶添加了使用條件註釋的提交按鈕。

+0

謝謝,這節省了我很多的努力! – Shawn