$.getScript callback - разночтения в документации
.
В документации jQuery.getScript( url [, success ] ) написано следующее: Код:
The callback is fired once the script has been loaded but not necessarily executed. Код:
This is a shorthand Ajax function, which is equivalent to: Читаем документацию по функции jQuery.ajax( [settings ] ) и видим: Код:
If script is specified, $.ajax() will execute the JavaScript that is received Использую jquery-1.7.2 и вроде как на практике срабатывает ПОСЛЕ выполнения, но не уверен что могу на это рассчитывать всегда и во всех браузерах. В сети встречаются жалобы, что коллбэк срабатывает раньше, но возможно что поведение изменилось с какой-то версии jQuery... Вопрос к прожжённым знатокам jQuery: так где же правда? |
Цитата:
То же самое для любого Ajax метода, кроме конечно методов определенных как иные события. |
Цитата:
Цитата:
Код:
If script is specified, $.ajax() will execute the JavaScript that is received |
Цитата:
Переводить, так нужно знать контекст, а не выдранное, что вы правильно поняли. Плохо с инглишем, ну так есть и на русском, какие проблемы. |
На русском тоже по разному переводят: https://jquery-docs.ru/jQuery.getScript/
Цитата:
И, как минимум, раньше он вёл себя именно так как я перевожу: https://stackoverflow.com/questions/...d-and-executed |
Цитата:
Я не знаю относительно чего вы переводите, но то что запрашивается и должно быть исполнено/помещено на страницу совершится только тогда, когда работа ajax завершена. Дискутировать по данному поводу просто глупо. |
Цитата:
Цитата:
|
callback выполняется по окончанию асинхронного запроса - это подвергается сомнению?
Окончанию асинхронного запроса есть загрузка и выполнения скрипта - это подвергается сомнению? callback не обязательно может быть выполнен по тем или иным причинам - это подвергается сомнению? |
Цитата:
Цитата:
Подозреваю, что поведение изменилось в районе jquery 1.5, когда были введены промисы, но нужны доказательства. Цитата:
|
Цитата:
Ежику понятно, что загрузка, это не исполнение, ибо запустить таковое не возможно, но это относится к загружаемому, но не к callback, вы же смешали и котлеты, и мух в одну кучу. В методе error определяются ошибки, в $.ajax success метод также возвращает статус выполнения вторым параметром. На этих статусах, на событиях и параметрах объекта XMLHttpRequest и построен $.ajax JQ. Если говорить об отличиях, то собственно это собственные некоторые методы, но подчинены работа XMLHttpRequest. Если вы сможете выполнить success (а именно об этом речь, а не к примеру beforeSend) до окончания асинхронного запроса, тогда ваше т.к. загрузка и выполнение - разные этапы будет иметь смысл и я вам лично установлю памятник. |
Я задал конкретный вопрос, а вы развели какую-то демагогию на пустом месте. Запрос к серверу, асинхронный он или нет, завершается одним и тем же - загрузкой данных (ну или ошибкой, но этот вариант мы сейчас не рассматриваем). Всё. Исполнение скрипта (и вызов callback) - это уже отдельная магия jQuery и реализована она может быть по-разному в зависимости от особенностей браузера.
В общем, нашёл объяснение на странице https://stackoverflow.com/questions/...d-vs-execution в последнем посте (за авторством Bizniztime), в котором есть ссылка на http://perfectionkills.com/global-ev...e-the-options/ --- похоже, что до jquery-2.1.0 для выполнения скриптов использовался window.eval() с откатом на window.execScript() для IE и некоторых других очень старых браузеров. И вот эта execScript() не возвращает результата выполнения, поэтому коллбек будет запущен в любом случае. Так что документация не врёт (хотя могли бы осветить этот момент подробней) и лучше не закладывать порядок выполнения колбека в алгоритм. |
Цитата:
Цитата:
|
Ваше буквоедство не несёт никакой полезной нагрузки.
Цитата:
Цитата:
|
Оригинально, ни чего не скажешь, в оригинале говорится о том, что callback выполняется после загрузки сценария (вообще правильнее было бы написать после завершения запроса), вопрос задается "о чем там написано?", при этом трактовать его относительно чего-то, доказывая свою правоту еще и утверждать, что вы все дураки.
Вам так кажется, что там говорится "вроде как callback может сработать ДО выполнения"? Да на здоровье. |
Сегодня перечитал на свежую голову - возможно вы правы касательно перевода. Но вопрос всё-таки был не о переводе, а о поведении. В любом случае ответ уже найден, так что предлагаю закрыть тему.
|
Цитата:
Разработчики все написали правильно, именно так и работает, а то что вы обнаружили баг, так это не означает, что разработчики своей документацией вводят вас в заблуждение, это всего лишь подтверждение истины - баги были, баги есть, баги будут всегда. PS. Кстати, может jQuery в сторону и используя XMLHttpRequest написать свое, определив конечно же и методы, и каков будет результат. В том смысле, что опираясь на логику, увидим ли иное поведение? |
Rise: спасибо, именно такой ответ и хотелось получить.
А execScript тоже синхронная функция? Во всех версиях? Если она всегда возвращает null - https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx - то вполне может быть асинхронной, имхо. И что будет в случае, если загруженный скрипт имеет синтаксическую ошибку? Проверял в хромиуме - колбек не вызывается в этом случае. А винды под рукой нет, чтобы проверить в ИЕ старых версий (перед 11-ой) :( |
Цитата:
Цитата:
|
Понял, спс.
|
Цитата:
Документация явно недостаточна в этом месте и должна была описать все случаи, раз уж там такие неожиданные различия в поведении. |
Часовой пояс GMT +3, время: 00:41. |