Устранаяем ошибку в Opera при ajax запросах

Главные вкладки

Аватар пользователя neochief neochief 26 апреля 2008 в 22:25

Наверняка многие пользователи бравого браузера Opera замечали неприятную особенность при отправлении ajax запросов таких как, например, загрузка файла на сервер (модуль Upload), а именно назойливая ошибка при первой отправке:

Для тех, кто хочет решить проблему, но не знает как - вот оно, решение:

1. Находим файл misc/drupal.js
2. В нем находим строку if (window.opera) { и вставляем сразу после нее вот такое:

 if (response == 0) {
   return;
 }

3. Сохраняем файл
4. [опционально] Если у вас установлен комплект jstools, следует пропатчить таким же образом файл modules/jstools/jstools.js

После этого, ошибка уходит насовсем, и все работает отлично.

(В атаче патч для патчефилов)

P.S. Этот фикс уже стар, как мир, и непонятно почему они его так и не закоммитят в следующую версию.

ВложениеРазмер
Иконка простого текстового файла opera_upload_hack.patch_.txt790 байт

Комментарии

Аватар пользователя pihel pihel 27 апреля 2008 в 11:01

У меня и раньше все под оперой работало 0_о

а блин извеняюсь, я всегда через "добавить" все прикреплял

Аватар пользователя PanDa777 PanDa777 12 июня 2008 в 17:32

Только что проверил - у меня почему-то под firefox не работает. Просто нескончаемо двигается полоска.... А если нажать "добавить" - прикреплеяются сразу два файла - один не показывается в списке...

Аватар пользователя neochief neochief 27 апреля 2008 в 23:13

Огласите версию, систему и подробности. Мне кажется, что ваша проблема никак не связана с данным патчем

Аватар пользователя PanDa777 PanDa777 29 апреля 2008 в 22:13

Безусловно, с данным патчем никак не связана. Просто похожая проблема, которуя я наблюдаю уже года 2 (с выход пятой версии, наверное). Кстати, похоже, дело связано с аддоном. На чистой win firefox 2.0.0.14 проблем нет. Ни кого такой проблемы не было? Авось, и аддон скажут... Просто интересно, как вообще некоторый аддон может повлиять на работу скриптов Drupal...

Added:
Проблему, похоже, вызывает плагин Linkification. Странно, никогда его не бажило. Почему из-за него это может произойти?

Upd2
Я более-менее даже понимаю, откуда корни этой проблемы растут. В коде, которое возвращается при upload, встерчается пара текстовых ссылок. Конечно, эти ссылки Linkfication успешно преобразовывает, ибо запрашивается этот ответ с помощью iframe, который включён в DOM страницы. После чего при попытке пропарсить этот код через Drupal.parseJSON и возникают проблемы. Решения я пока, кроме как добавления drupal.ru в "чёрный" список Linkification, не знаю.

Аватар пользователя VladSavitsky VladSavitsky 4 июня 2008 в 17:43

А как в Друпал6 решить эту проблему с Оперой?
Раньше вроде бы опера нормально работала, а сейчас стали возникать такие же ошибки.

Аватар пользователя VladSavitsky VladSavitsky 30 июня 2008 в 13:47

В Друпал 6 проблема решается заменой файла jquery.form.js более свежей версией:
http://jqueryjs.googlecode.com/svn/trunk/plugins/form/jquery.form.js
После этой замены нужно очистить кеш на странице "Производительность" (admin/settings/performance)

Аватар пользователя ihappy ihappy 6 сентября 2009 в 11:13

"VladSavitsky" wrote:
В Друпал 6 проблема решается заменой файла jquery.form.js более свежей версией:
http://jqueryjs.googlecode.com/svn/trunk/plugins/form/jquery.form.js
После этой замены нужно очистить кеш на странице "Производительность" (admin/settings/performance)

Файл не обнаружен.
Исправление ошибки не имеет возможности.

Аватар пользователя vfix vfix 15 октября 2009 в 14:14

Только приступил к освоению Друпала и столкнулся с этой проблемой, при загрузке файла, тлько сообщение ошибки другое:

Произошла HTTP ошибка 0. \n/?q=filefield/ahah/images/field_image_image/0

Друпал последний - 6.14, Opera 10.00,
в ФФ - ощибки не возникает.

Решил проблему советом:
"VladSavitsky в пн, 30/06/2008 - 13:47.

В Друпал 6 проблема решается заменой файла jquery.form.js более свежей версией:
http://jqueryjs.googlecode.com/svn/trunk/plugins/form/jquery.form.js
После этой замены нужно очистить кеш на странице "Производительность" (admin/settings/performance)"

по указанной ссылке нужный файл не загружается, но в там в коментариях есть живая ссылка

Аватар пользователя albik albik 3 ноября 2009 в 23:30

neochief wrote:
вот тут самая свежая версия, с современным фиксом проблемы, 2.18 не всегда работает. 2.28:
http://camp09.drupal.ua/misc/jquery.form.js[/quote]
Спасибо, помогло от ошибки HTTP 0, а то уже не знал, в какую сторону копать.

Аватар пользователя andypost@drupal.org andypost@drupal.org 29 октября 2009 в 1:18

neochief баг уже давно пылится http://drupal.org/node/240777
Перевел его в 7ю ветку ибо там такая же беда с image, думаю стоит пропиарить сие, чтобы больше людей потестировало, ведь от этой либы может зависеть масса в контрибе и вероятно, что в 6й ветке это не исправят уже.

Аватар пользователя goodboy goodboy 18 ноября 2009 в 11:34

andypost@drupal.org, использую Drupal 6.14

Кеширование в Друпале везде отключено.
Upload progress не включен.
FileField 6.x-3.2
Upload не включен.

Настройки PHP:

post_max_size 16M
realpath_cache_size 16M
upload_max_filesize 16M

max_execution_time 30
max_input_time 60
memory_limit 128M

Пробовал руками подкладывать jquery.form.js
Затем установил модуль jQuery Form Update 6.x-1.0, использую jquery.form.js 2.16

Картинки (Widget type: Image )успешно закачиваются до определенного размера, установленного экспериментально (~800К). При загрузке выполняется автоматический ресайз. Ограничение размера на загрузку картинки: 750K. Естественно, пробовали на разных браузерах - везде были ошибки. В настоящее время у меня нигде нет ошибок. Несколько сотен пользователей успешно закачали картинки, несколько десятков - не успешно. Последняя проблемная загрузка решилась закачкой на MSIE...

Аватар пользователя andypost@drupal.org andypost@drupal.org 18 ноября 2009 в 12:22

"Goodboy" wrote:
Картинки (Widget type: Image )успешно закачиваются до определенного размера, установленного экспериментально (~800К).

Это очень похоже на нехватку памяти при изменении размера, решается увеличением памяти для php процесса, также будет решаться работой через ImageAPI после принятия патча (imageapi позволяет заменить вызовы GD на imagemagick если таковой установлен на хостинге)

PS: большая просьба ко всем протестировать http://drupal.org/node/618024 - добавляет поддержку imageapi для генерации превьюх и позволит полноценно использовать всю мощь этого модуля

Аватар пользователя goodboy goodboy 10 ноября 2015 в 11:46

Андрей, спасибо за участие! Теперь загружаются файлы размером 1.1M, при бОльших размерах возникает окно с ошибкой.
В то же время, установлены лимиты в 500K, однако сообщение о превышении лимита возникает только при успешной попытки закачки.

Размер памяти для php процесса 128M
Патч накатил (пропатченный файл во вложении).

Модуль ImageAPI GD2 включен

admin/settings/image-toolkit установлено Качество JPEG: 90%
ImageAPI ImageMagick не установлен
Используется ImageCache

Что предпринять? Уменьшить качество? Установить ImageMagick? Подменить jquery.form.js ?

UPD: Все перепробовал (качество 75%, установил ImageMagick 6.5.5-10 2009-11-18 Q16 , http://malsup.com/jquery/form/jquery.form.js?2.36 ). Отличие ImageMagick от GD2 увидел только в том, что "колесико" при закачке крутится рывками.

Аватар пользователя goodboy goodboy 19 ноября 2009 в 11:19

Я включал imagemagick - проблема не решилась, а "колесико" загрузки начало крутиться с рывками.

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

Аватар пользователя antton antton 20 ноября 2009 в 2:55

У меня проблема решилась, но частично. Раньше загрузка в Opera вообще не работала, теперь же загружается несколько файлов ~15 шт (не зависит от их размера, грузил и совсем маленькие текстовые файлы 24 байта). и после выскакивает ошибка: "Произошла HTTP ошибка 0. \n/upload/js"
При этом при загрузке через Internet Eplorer и Firefox проблем не возникает, все файлы спокойно загружаются.

Версии компонетов Drupal:
- Drupal 6.14
- jquery.form.js версий 2.28, 2.35
- jquery.js (тоже обновлял)
- браузер Opera 9.63
- модуль загрузки из стандартной поставки Upload.

Настройки php.ini:
max_execution_time 30
max_input_time 60
realpath_cache_size 16K
upload_max_filesize 16M
post_max_size 100M
memory_limit 32M

Аватар пользователя PVasili PVasili 18 ноября 2009 в 20:11

Опера, с момента массового использования всегда славилась своим особым отношением к JS.
Из-за этого у меня дальше наладонника ни где не прижилась, несмотря на многие удобства - предсказуемость поведения важнее.

Аватар пользователя andypost@drupal.org andypost@drupal.org 19 ноября 2009 в 13:09

Все проверки происходят исключительно после полной загрузки файла, возможно сие можно перекрыть, но вероятно только flash загрузчиком с ссответствующим кодом на стороне сервера.

Итак, что у кого в логах?

Аватар пользователя goodboy goodboy 22 ноября 2009 в 18:43

Логи выдадим чуть позже, а вот Хром при загрузке 2M файла выдал ошибку:

"413 Request Entity Too Large
nginx/0.8.21"

Может, это что-то объяснит...

Аватар пользователя antton antton 20 ноября 2009 в 2:50

"PVasili" wrote:
Опера, с момента массового использования всегда славилась своим особым отношением к JS.

Я всё понимаю, но дело в том что многие пользуются Оперой, должен быть способ лечения и этого глюка.
Печально, но в моём случае дело не в нехватке памяти и не в обработке изображений, так что ImageAPI мне увы не поможет (

Аватар пользователя andypost@drupal.org andypost@drupal.org 21 ноября 2009 в 3:20

Судя по issues которые я приводил в предыдущих коментах - грабли в самой опере и делать для неё костыли врят ли кто будет. Имхо проще закинуть баг в оперу - пусть правят у себя.

Хотя судя по 21му коменту в http://drupal.org/node/92640 опера считает что это баг в jq.form

Аватар пользователя Psixo Psixo 19 декабря 2009 в 8:26

Ну вот,снова, обновил Drupal до 6.15 и полезло, как правильно пофиксить? Просто боюсь что фиксеные файлы которые здесь выкладывали, немного уже устарели.

Аватар пользователя Sky Cat Sky Cat 13 января 2010 в 3:44

Тоже была подобная проблема. У меня при слишком большом количестве тэгов для ноды (более 50), начала вылезать эта ошибка.
Решение:
модуль batax. В нем ставим нужное количество прикрепляемых терминов к одной ноде.
кусок конфига для nginx (если проблема не исчезнет):

location /taxonomy/autocomplete/ {
proxy_pass http://127.0.0.1:8082/taxonomy/autocomplete/;
proxy_redirect off;
proxy_set_header    Host    $host;
proxy_set_header    X-Real-IP       $remote_addr;
proxy_set_header    X-Forwarded-For $remote_addr;
    proxy_buffers 8 64k;
    proxy_intercept_errors on;
    proxy_connect_timeout 900s;
    proxy_read_timeout 900s;
    proxy_send_timeout 900s;
    proxy_buffering on;
}
Аватар пользователя borys@drupal.org borys@drupal.org 28 февраля 2010 в 15:38

1. взял файл фикс (http://camp09.drupal.ua/misc/jquery.form.js) и заменил.
2. очистил кэш.
использую друпал 6.15.
проблема с загрузкой файла через оперу не исчезла...

Ошибка:
Сталася помилка HTTP із статусом 0.
/filefield/ahah/libbook/field_book/0

Файл в результате попадает в папку \sites\default\files\
но с такой ошибкой...
как быть?

Аватар пользователя kolyas kolyas 7 марта 2010 в 12:59

drupal 6.16
замена jquery.form не помогла
патчи с не применить .. там написано строки для замены указаны 330, а у меня drupal.js 298 строк.

какие еще варианты есть для борьбы с error 0.

(в адресе ошибки пишет node_gallery/upload/js)

--------------------------------

решилось путем скачивания jquery.form с сайта jquery

Аватар пользователя ihappy ihappy 21 марта 2010 в 10:40

drupal 6.16
замена jquery.form не помогла.
Патчи толку не дали. При отправки файла при помощи анан вылазит окно с ошибкой

An HTTP error 0 occurred.
/handler/add_foto_js

весь форум перерыл, в общем все сводится к одной этой теме.
где я не нашел решения((

Самое главное, если я просто возвращаю какое то значение, без файла, то все нормально. Только при загрузки файла вылазит ошибка.
в общем теряюсь в догадках.
папки имеют все доступ 0777 и тмп тоже. выбирал публичный и не публичный метод загрузки. эффект один. на всех браузерах, кроме ИЕ. так как в линухах глючит сволочь он.

UPD: Заработало. После удаление лишних пробелов и комментариев в коде. или что то не заметил... другого нечего не менял.

Аватар пользователя klime klime 6 мая 2010 в 11:30

"iHappy" wrote:
UPD: Заработало. После удаление лишних пробелов и комментариев в коде. или что то не заметил... другого нечего не менял.

а где именно пробелы удалял?

Аватар пользователя ihappy ihappy 7 мая 2010 в 22:02

"klime" wrote:
а где именно пробелы удалял?

Данная ошибка у меня снова появилась. И решить уже ее не смог.
Хотя в ИЕ работает все отлично.

Аватар пользователя klime klime 14 мая 2010 в 11:05

"iHappy" wrote:
Хотя в ИЕ работает все отлично.

у меня и в осле неработает - может из-за медленного инета быть? где мож таймаут прописать можно? может в этом проблема

Аватар пользователя neochief neochief 5 сентября 2010 в 19:57

В последних версиях оперы и друпала проблема не актуальна. Так что обновляйтесь и будет вам счастье.

Аватар пользователя aka_smile aka_smile 5 сентября 2010 в 23:20

neochief
опера 10.61
друпал 6.19
проблема есть
причем то была а то вот часа 3 назад как пробило.
нынче ситуация такая.
опера не приаттачивает файл и висит все время и кажет анимацию прогресс бара
гуглХром и IE нормально приаттачивают

предполагаю что после очистки кэша друпала так стало

Аватар пользователя Izem Izem 3 декабря 2010 в 0:09

После какого-то из апдейтов 6-й версии Друпала тоже стала выскакивать эта ошибка на всех браузерах. Замена jquery.form.js не помогла. Углубился в поиск, и что получилось:

1. Заходим на http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html
2. Ищем client_max_body_size
3. Ещё читаем http://sysoev.ru/web/upload.html
4. Добавляем в конфиг nginx'a (в Debian'e это /etc/nginx/nginx.conf) между 'http {' и 'server {' строку
client_max_body_size 8M;
По умолчанию в nginx этот параметр равен 1M. Установить надо такое значение, чтобы оно было больше максимального размера загружаемых файлов.
5. Перезагружаем nginx ( # /etc/init.d/nginx restart ).
6. Сбрасываем кэш в Друпале.

У меня всё заработало. Smile

PS: Собственно, тут Nickolyan уже писал об этом, но настолько лаконично, что было не очень понятно, что делать.

Аватар пользователя Dark_kz Dark_kz 26 июля 2012 в 10:33

Izem wrote:
После какого-то из апдейтов 6-й версии Друпала тоже стала выскакивать эта ошибка на всех браузерах. Замена jquery.form.js не помогла. Углубился в поиск, и что получилось:

1. Заходим на http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html
2. Ищем client_max_body_size
3. Ещё читаем http://sysoev.ru/web/upload.html
4. Добавляем в конфиг nginx'a (в Debian'e это /etc/nginx/nginx.conf) между 'http {' и 'server {' строку
client_max_body_size 8M;
По умолчанию в nginx этот параметр равен 1M. Установить надо такое значение, чтобы оно было больше максимального размера загружаемых файлов.
5. Перезагружаем nginx ( # /etc/init.d/nginx restart ).
6. Сбрасываем кэш в Друпале.

У меня всё заработало. Smile

PS: Собственно, тут Nickolyan уже писал об этом, но настолько лаконично, что было не очень понятно, что делать.


Помогло. Спасибо!

Аватар пользователя Funtik44 Funtik44 23 июня 2011 в 17:33

Opera 11.11
Drupal 6.22

При добавлении файла, постоянно прокручивает прогрессбар и не загружает картинку. Короче опять эта лажа!