Как стать автором
Обновить

Решение проблемы с ajax-загрузкой файлов в плагине jQuery Form в Opera 10

Время на прочтение2 мин
Количество просмотров2.2K
Есть такой всем известный плагин Form под jQuery. Я считаю его одним из лучших для асинхронной отправки форм.

Но в свое время пришлось отказаться от его использования ввиду неработоспособности при асинхронной отправке файлов в Opera 10. У меня в девятой Опере все было нормально.

Проблема необычна: файлы определенного размера (у меня до 80-90кб) загружаются нормально. Но если файл больше, то не срабатывает ни одна из callback-функций (success, error). При этом файл корректно загружается на сервер, но этот момент теперь нельзя поймать из браузера. В IE, FireFox и Chrome такая проблема отсутствует.

19 февраля вышла последняя версия плагина, где исправлена какая-то проблема с iframe в Opera, но это не помогло.

В интернете я так и не нашел решения и копнул сам. Все оказалось просто.

Ищем по слову «opera» в файле jquery.form.js и попадаем сюда:

var domCheckCount = 50;
.....
if (--domCheckCount) {
    // in some browsers (Opera) the iframe DOM is not always traversable when
    // the onload callback fires, so we loop a bit to accommodate
    cbInvoked = 0;
    setTimeout(cb, 100);
    return;
}
log('Could not access iframe DOM after 50 tries.');
return;


Opera не успевает получить доступ к iframe за раз, и пытается сделать это в цикле. 50 раз очевидно не хватает. Меняем на цифру побольше и не имеем проблем (на самом деле все зависит от размера файла).

Но интересно другое. Проблема не устранена вплоть до последней версии плагина.
И если она проявляется только при определнном размере загружаемого файла, могу предположить, что, так или иначе, имеет место вопрос производительности, вот почему уважаемый автор плагина господин malsup мог пропустить ее, у него просто комп мощнее.

P.S. Вы можете просто переделать цикл на бесконечный, правда не знаю будут ли последствия этого действа. Я поставил domCheckCount = 200 и написал автору плагина об этом.

UPD: Автор плагина по моей просьбе подправил эту проблему
UPD: Вышла новая версия плагина
UPD: На сегодняшний день проблема пока устранена автором пассивно (значения переменной domCheckCount = 100 иногда не хватает), по сей причине переношу в блог JQuery.
Исходники статей можно найти здесь
Теги:
Хабы:
Всего голосов 14: ↑11 и ↓3+8
Комментарии9

Публикации

Истории

Ближайшие события

Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
AdIndex City Conference 2024
Дата26 июня
Время09:30
Место
Москва
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область