Есть такой всем известный плагин Form под jQuery. Я считаю его одним из лучших для асинхронной отправки форм.
Но в свое время пришлось отказаться от его использования ввиду неработоспособности при асинхронной отправке файлов в Opera 10. У меня в девятой Опере все было нормально.
Проблема необычна: файлы определенного размера (у меня до 80-90кб) загружаются нормально. Но если файл больше, то не срабатывает ни одна из callback-функций (success, error). При этом файл корректно загружается на сервер, но этот момент теперь нельзя поймать из браузера. В IE, FireFox и Chrome такая проблема отсутствует.
19 февраля вышла последняя версия плагина, где исправлена какая-то проблема с iframe в Opera, но это не помогло.
В интернете я так и не нашел решения и копнул сам. Все оказалось просто.
Ищем по слову «opera» в файле jquery.form.js и попадаем сюда:
Opera не успевает получить доступ к iframe за раз, и пытается сделать это в цикле. 50 раз очевидно не хватает. Меняем на цифру побольше ине имеем проблем (на самом деле все зависит от размера файла).
Но интересно другое. Проблема не устранена вплоть до последней версии плагина.
И если она проявляется только при определнном размере загружаемого файла, могу предположить, что, так или иначе, имеет место вопрос производительности, вот почему уважаемый автор плагина господин malsup мог пропустить ее,у него просто комп мощнее.
P.S. Вы можете просто переделать цикл на бесконечный, правда не знаю будут ли последствия этого действа. Я поставил domCheckCount = 200 и написал автору плагина об этом.
UPD: Автор плагина по моей просьбе подправил эту проблему
UPD: Вышла новая версия плагина
UPD: На сегодняшний день проблема пока устранена автором пассивно (значения переменной domCheckCount = 100 иногда не хватает), по сей причине переношу в блог 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.
Исходники статей можно найти здесь