Как оптимизировать код под IE 9?
Здравствуйте. У клиента "вдруг" появилась поддержка ИЕ 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... профит Спасибо за внимание :)