Порядок оценки в коде JavaScript с использованием Ajax? - PullRequest
3 голосов
/ 31 июля 2009

Похоже (мне), что операторы javascript не всегда выполняются один за другим. Я знаю, что они делают это, но иногда кажется, что функция show () запускается одновременно с hide (), поэтому логика не работает. Есть функции обратного вызова, такие как jQuery.load ("some.html", thenrunthis) ..

Мне нужно понять рабочую логику. любая помощь / ведет?

спасибо заранее

Ответы [ 6 ]

6 голосов
/ 31 июля 2009

Вы действительно спрашиваете о "A" в AJAX . Он обозначает асинхронный и позволяет сделать запрос без блокировки . Функция обратного вызова будет выполнена, если / когда запрос завершится успешно, но остальная часть вашего кода продолжит выполняться. Одним из основных преимуществ этого подхода является отзывчивость пользовательского интерфейса. Синхронный вызов по существу остановит браузер, пока ваш запрос не вернется, что может занять некоторое время.

Редактировать: Чтобы немного расширить свой первоначальный ответ, я подумал, что должен указать, что функции обратного вызова не ограничиваются запросами AJAX. Поскольку вы, похоже, используете jQuery, возможно, вы захотите взглянуть на jQuery Events API , чтобы узнать больше примеров использования обратных вызовов.

Пример: Предположим, вы хотите ответить определенным образом, когда поле ввода текста получает фокус. Вот пример прямо из документации jQuery , в которой функция обратного вызова используется для ответа на элемент input, который получает фокус:

$("input").focus(function () {
     $(this).next("span").css('display','inline').fadeOut(1000);
});

Эта функция действительно является функцией обратного вызова. Он будет вызван, когда пользователь выберет элемент input на странице. Работающая демонстрация приведенного выше кода в действии здесь .

2 голосов
/ 31 июля 2009

Обратные вызовы используются в javascript и на любом языке, чтобы сообщить коду кода, что делать, когда происходит данное событие. Это помогает предотвратить объединение всего вашего кода в один большой беспорядок.

См. Запись википедии .

1 голос
/ 31 июля 2009

Теоретически, совсем не гарантируется, что операторы javascript будут выполняться после полной загрузки страницы. Потоковый браузер может выбрать выполнение javascript во время рендеринга HTML.

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

1 голос
/ 31 июля 2009

Некоторые функции имеют обратные вызовы, потому что они асинхронные.

Сценарий. В javascript вы хотите получить контент с другой HTML-страницы. Вы вызываете эту страницу, но сервер работает очень медленно. Вы хотите, чтобы вызов метода javascript зависал в этой точке, предотвращая дальнейшее выполнение? Ответ нет. Это не очень хорошая вещь для пользователя.

Введите асинхронный вызов метода. Когда вы вызываете страницу x, вместо того, чтобы ждать, пока она вернется, сценарий просто движется дальше. Это удерживает браузер пользователей от блокировки. Тем не менее, метод обратного вызова дается так, что когда данные действительно возвращаются, они могут быть обработаны. Это позволяет странице не блокироваться потенциально длительными операциями.

Имеет смысл?

1 голос
/ 31 июля 2009

Функции обратного вызова обычно связаны с асинхронными событиями, и хороший пример - jQuery.load.

Когда вы вызываете такую ​​функцию, результат вызова ее не сразу доступен, даже если управление может быть возвращено вызывающему коду почти сразу. Цель предоставления функции обратного вызова - сказать: «Иди и сделай эту операцию и, когда ты закончишь, запусти этот кусок кода, чтобы обработать результаты. Тем временем, я буду отсутствовать, делая что-то еще '

Имеет ли это смысл?

0 голосов
/ 31 июля 2009

Обратные вызовы хороши тем, что они предотвращают блокировку браузера и становятся непригодными для использования при работе. Он позволяет браузеру по-прежнему работать и затем продолжать работу над JavaScript, когда предыдущий элемент завершен, поскольку он обрабатывает работу асинхронно.

jQuery.load("some.html",thenrunthis);

Если thenrunthis не было и загрузка some.html заняла какое-то время, то человек не мог использовать браузер, пока не закончилась загрузка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...