Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Зависимость работы асинхронного кода от alert (https://javascript.ru/forum/events/13316-zavisimost-raboty-asinkhronnogo-koda-ot-alert.html)

vitalif 25.11.2010 20:46

Зависимость работы асинхронного кода от alert
 
Привет!
Уже не первый раз натыкаюсь на следующую ситуацию:
Есть некий js-код, который в Firefox прекрасно работает, но.... только под дебаггером (типа Venkman'а) или если в произвольное место вставить alert(). Т.е. начинаешь отлаживать - работает. Прекращаешь - не работает!
В прошлые разы что это было - не помню.

А в этот раз это аж целый SVG-Edit, прикручиваемый к MediaWiki (у нас тут в CustIS, если кто знает - это как раз та самая сборка экстенжнов, о которой мы рассказывали на ADD)!!!
Причём я могу это продемонстрировать на нашей внешней "вики-песочнице":

http://wikisandbox.custis.ru/Фай...ботки.svg

Попробуйте кликнуть кнопку внизу страницы и отредактировать файл SVG-Edit'ом под Mozilla Firefox, и узрите баг - файл не загрузится! В то же время если вставить в fetchSVG(), либо в другое место, к примеру в callback из svgEditor.addExtension, в файле extensions/SVGEdit/svg-edit/ext-mediawiki.js обычный alert('что угодно'), файл начинает стабильно грузиться! То же самое происходит, если гонять сие под Venkman JS Debugger'ом. В Chrome происходят похожие вещи. В Opera всё отлично работает всегда.

Чтобы пробовать сохранить файл, сначала нужно зарегистрироваться (ссылка в правом верхнем углу). Чтобы открыть - не обязательно...

Если кто-нибудь знает или подозревает, ЧТО ЭТО ЗА НАФИГ, расскажите, пожалуйста? :)

B@rmaley.e><e 25.11.2010 20:54

alert приостанавливает выполнение кода
var time = new Date();
alert('Подожди пару секунд и нажми ок.');
alert('Ты думал ' + (new Date - time) / 1000 + 'сек')
Соответствен но, что-то где-то у вас происходит слишком быстро и не дожидается загрузки файла.

vitalif 25.11.2010 20:57

Это логично, это первое, о чём я тоже подумал.
Но проблема не так проста - из jQuery дёргается запрос $.get(), которому даётся callback.
Если не вставить alert(), callback вообще не вызывается.
Т.е. вообще запрос не заканчивается.

vitalif 26.11.2010 12:40

Ни у кого идей нет, как это ловить хотя бы?

Gozar 26.11.2010 12:59

удалено.

Kolyaj 26.11.2010 13:23

Цитата:

Сообщение от vitalif
Ни у кого идей нет, как это ловить хотя бы?

Что ловить-то? Вы даже код не показали.

vitalif 26.11.2010 19:52

Исходники можно посмотреть по ссылке любым js-дебаггером.
В сторону success и onload событий чьих?

Gozar 26.11.2010 20:06

удалено.


Часовой пояс GMT +3, время: 11:24.