Как оптимизировать код под IE 9?

Рейтинг: 0Ответов: 0Опубликовано: 17.10.2014

Здравствуйте. У клиента "вдруг" появилась поддержка ИЕ 9, раньше под него заточки не было никакой. Следовательно, писалось все для версий от 10. В FF, Chrome, Opera работает на ура. Все работает в нормальных браузерах, в ИЕ ошибка:

SCRIPT5007: Не удалось получить значение свойства "errorInfo": значением объекта является NULL или он не определен

Код сей операции:

var query = $.ajax({
    async    : false,
    type     : ajType, //POST
    url      : path,
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    data     : JSON.stringify( params )
});

query.success( function( result ){
      console.log(result);
      responseErrors( new Array( result ), result.errorInfo, function(){
      auth.user.sessionId = result.sessionId;
      auth.user.login =  loginData.login;
      data.title = "Подтвердите вход";
      updateTemplates( data );  
  });
});

dataType: 'json' - вот тут немного не понимаю, это указываем тип данных на отдачу или на прием, буду рад, если подскажете, пробовал и json, и html.

По приведенному выше коду: в консольке, которая выводит result внутри промиса success, висит undefined... Честно говоря, ума не приложу почему. В нормальных браузерах все работает и только ИЕ не понимает. С чем это может быть связано, кто знает? )


Долго искал хотя бы более-менее адекватное объяснение того почему так происходит в ИЕ9, пробовал сделать с помощью эмуляции, но кроме корявого внешнего вида ничего не изменилось. Пробовал вешать другие промисы и натолкнулся на .complite, который отработал. Начал копать глубже и...

Знатоки, внимание - правильный ответ:

Дело в том, что передавая параметр "result" в функцию, мы не берем в учет остальные возможные параметры (а вот ИЕ берет их в учет) и имеем:

complete: function (jqXHR, complete_textStatus) - нужный параметр идет первым и работает
success: function  (data, textStatus, jqXHR) - нужный - третьий и не работает

Для себя я решил этот вопрос так:

.success( function(){
    result = arguments[2];
    ..... далее по тексту .....
}

То есть, получаем массив arguments и его третий элемент приравниваем к result... профит Спасибо за внимание :)

Ответы

Ответов пока нет.