Pull to refresh

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

Reading time2 min
Views2.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.
Исходники статей можно найти здесь
Tags:
Hubs:
+8
Comments9

Articles

Change theme settings