Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2017, 09:40
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

$.getScript callback - разночтения в документации
.
В документации jQuery.getScript( url [, success ] ) написано следующее:
Код:
The callback is fired once the script has been loaded but not necessarily executed.
Т.е. вроде как callback может сработать ДО выполнения загруженного скрипта. Однако, там же написано и следующее:
Код:
This is a shorthand Ajax function, which is equivalent to:
$.ajax({
  url: url,
  dataType: "script",
  success: success
});

Читаем документацию по функции jQuery.ajax( [settings ] ) и видим:
Код:
If script is specified, $.ajax() will execute the JavaScript that is received
from the server before passing it on to the success handler as a string.
Т.е. callback "success" должен железно сработать уже ПОСЛЕ выполнения загруженного скрипта...

Использую jquery-1.7.2 и вроде как на практике срабатывает ПОСЛЕ выполнения, но не уверен что могу на это рассчитывать всегда и во всех браузерах. В сети встречаются жалобы, что коллбэк срабатывает раньше, но возможно что поведение изменилось с какой-то версии jQuery...

Вопрос к прожжённым знатокам jQuery: так где же правда?
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2017, 12:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Белый шум
Т.е. вроде как callback может сработать ДО выполнения загруженного скрипта.
Там такого не написано. Написанное гласит, что callback запускается после загрузки сценария (а иначе и не может быть), но не обязательно выполняется.

То же самое для любого Ajax метода, кроме конечно методов определенных как иные события.
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2017, 12:52
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

Сообщение от laimas Посмотреть сообщение
Написанное гласит, что callback запускается после загрузки сценария (а иначе и не может быть), но не обязательно выполняется.
Я так и написал, просто акцентировал внимание на том моменте, который меня интересует в рамках данного вопроса.

Сообщение от laimas Посмотреть сообщение
То же самое для любого Ajax метода, кроме конечно методов определенных как иные события.
Тогда переведите мне фразу:
Код:
If script is specified, $.ajax() will execute the JavaScript that is received
from the server before passing it on to the success handler as a string.
-- может я что-то не так понял?
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2017, 12:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Белый шум
Я так и написал
Да ну, то есть Т.е. вроде как callback может сработать ДО выполнения загруженного скрипта, это о том же самом говорит?

Переводить, так нужно знать контекст, а не выдранное, что вы правильно поняли. Плохо с инглишем, ну так есть и на русском, какие проблемы.
Ответить с цитированием
  #5 (permalink)  
Старый 23.07.2017, 13:51
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

На русском тоже по разному переводят: https://jquery-docs.ru/jQuery.getScript/
Цитата:
Функция обратного вызова исполняется после того как он будет загружен, но необязательно до выполнения.
И вообще ваш вариант перевода мне кажется странным, если not necessarily executed относить к callback is fired, а не к script has been loaded, то какая-то путаница получается: как он может быть fired но не executed??

И, как минимум, раньше он вёл себя именно так как я перевожу:
https://stackoverflow.com/questions/...d-and-executed
Ответить с цитированием
  #6 (permalink)  
Старый 23.07.2017, 14:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Белый шум
И вообще ваш вариант перевода мне кажется странным, если not necessarily executed относить к callback is fired
Метод jQuery.getScript(), получает с сервера js-сценарий и выполняет его, значит ваше возражение полагает, что получаемый js вполне может выполнится будучи еще не загруженным?

Я не знаю относительно чего вы переводите, но то что запрашивается и должно быть исполнено/помещено на страницу совершится только тогда, когда работа ajax завершена. Дискутировать по данному поводу просто глупо.
Ответить с цитированием
  #7 (permalink)  
Старый 23.07.2017, 14:13
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

Сообщение от laimas Посмотреть сообщение
но то что запрашивается и должно быть исполнено/помещено на страницу совершится только тогда, когда работа ajax завершена.
Именно поэтому ваш перевод:
Сообщение от laimas Посмотреть сообщение
callback запускается после загрузки сценария, но не обязательно выполняется.
не имеет смысла
Ответить с цитированием
  #8 (permalink)  
Старый 23.07.2017, 14:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

callback выполняется по окончанию асинхронного запроса - это подвергается сомнению?

Окончанию асинхронного запроса есть загрузка и выполнения скрипта - это подвергается сомнению?

callback не обязательно может быть выполнен по тем или иным причинам - это подвергается сомнению?
Ответить с цитированием
  #9 (permalink)  
Старый 23.07.2017, 15:09
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

Сообщение от laimas Посмотреть сообщение
callback выполняется по окончанию асинхронного запроса - это подвергается сомнению?
нет

Сообщение от laimas Посмотреть сообщение
Окончанию асинхронного запроса есть загрузка и выполнения скрипта - это подвергается сомнению?
да. Загрузка и выполнение - разные этапы, между которыми можно запустить коллбэк. Выше я приводил ссылку, где обсуждается именно такое поведение и ищется обходной путь.
Подозреваю, что поведение изменилось в районе jquery 1.5, когда были введены промисы, но нужны доказательства.

Сообщение от laimas Посмотреть сообщение
callback не обязательно может быть выполнен по тем или иным причинам - это подвергается сомнению?
Условия запуска колбека описаны в первой части обсуждаемого предложения; "but" и всё что после - не имеет смысла при вашем переводе, а момент запуска коллбека остаётся не раскрыт (т.к. загрузка и выполнение - разные этапы).
Ответить с цитированием
  #10 (permalink)  
Старый 23.07.2017, 15:37
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Белый шум
да. Загрузка и выполнение - разные этапы, между которыми можно запустить коллбэк.
Это вы уже говорите (или подразумеваете, ...) не о callback, который запускается только по окончании запроса в ($.ajax, это метод success), в процессе загрузка и до нее этого исполнить нельзя.

Ежику понятно, что загрузка, это не исполнение, ибо запустить таковое не возможно, но это относится к загружаемому, но не к callback, вы же смешали и котлеты, и мух в одну кучу.

В методе error определяются ошибки, в $.ajax success метод также возвращает статус выполнения вторым параметром.

На этих статусах, на событиях и параметрах объекта XMLHttpRequest и построен $.ajax JQ. Если говорить об отличиях, то собственно это собственные некоторые методы, но подчинены работа XMLHttpRequest.

Если вы сможете выполнить success (а именно об этом речь, а не к примеру beforeSend) до окончания асинхронного запроса, тогда ваше т.к. загрузка и выполнение - разные этапы будет иметь смысл и я вам лично установлю памятник.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли так использовать callback функции? Denwf Node.JS 2 14.03.2017 10:20
Работы с callback функциями jenek_34 Общие вопросы Javascript 13 25.03.2015 12:03
Работа с textarea Rompo Events/DOM/Window 14 16.12.2013 17:41
Callback работает не так как я от него жду singaporian Общие вопросы Javascript 3 14.08.2013 00:42
Перевод API документации по ExtJS maxyc ExtJS 4 08.12.2009 16:18