2013-03-29 2 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 обратный вызов ajax никогда не запускается, и браузер просто отображает строку необработанного JSON на пустой странице, поэтому вызов ajax работает и возвращает ожидаемые данные. В других браузерах срабатывает обратный вызов успеха, и json анализируется, и соответствующий код вставляется в div на странице.

Полный Javascript Файл: http://pastebin.com/G9MYBis5

Любые идеи?

+0

Вы должны, вероятно, указать версию IE ... – maxedison

+0

@maxedison только IE10 имеет FormData – Musa

+0

Если ваша форма отправляет это означает, что где-то в вашем отправителе возникла ошибка. – Musa

ответ

2

ОК, так что решение для меня было сделать эту линию первой линии в моей голове тег:

<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

Смежные вопросы