Кто-то должен защитить использование вертикального пробела здесь!:)
if ( cond1 == val1
and cond2 == val2
and cond3 == val3
):
do_stuff()
Это делает каждое условие явно видимым. Это также позволяет более чистое выражение более сложных условий:
if ( cond1 == val1
or
( cond2_1 == val2_1
and cond2_2 >= val2_2
and cond2_3 != bad2_3
)
):
do_more_stuff()
Да, мы обмениваем немного вертикальной недвижимости на ясность. Определенно стоящий того IMO.
Лучший способ сделать это - связать обратные вызовы, как сказал Носредна. Я бы не рекомендовал использовать синхронные XMLHttpRequest, поскольку они блокируют все ваше приложение.
Насколько мне известно, для этого не так много помощников, но вы могли бы сделать что-то вроде обратного FIFO.
Вы можете попробовать повествовательный javascript http://www.neilmix.com/narrativejs/doc/
Я сам никогда не использовал его. Если бы я хотел это сделать, я бы установил какую-то абстракцию для связывания асинхронных действий. Как говорили другие, синхронная версия объекта ajax блокирует обработку событий, пока он ожидает ответа. Это заставляет браузер выглядеть так, как будто он завис, пока не получит ответ.
Посмотрите на это: http://docs.jquery.com/Ajax/jQuery.ajax (щелкните вкладку «Параметры»).
Но помните синхронный вызов заморозит страницу до тех пор, пока не будет получен ответ, поэтому его нельзя будет использовать на рабочем сайте, потому что пользователи рассердятся, если по какой-либо причине им придется ждать 30 секунд с зависшим браузером.
РЕДАКТИРОВАТЬ: хорошо, с вашим обновлением станет яснее, чего вы хотите достичь;)
Итак, ваш код может выглядеть так:
$.getJSON("http://example.com/jsoncall", function(data) {
process(data);
$.getJSON("http://example.com/jsoncall2", function (data) {
processAgain(data);
$.getJSON("http://example.com/anotherjsoncall", function(data) {
processAgainAndAgain(data);
});
});
});
Таким образом, второй вызов будет выполнен только тогда, когда будет получен ответ на первый вызов и обработано, а третий вызов будет выдан только тогда, когда будет получен и обработан ответ на второй вызов. Этот код предназначен для getJSON, но его можно адаптировать к $ .ajax.
У вас есть два варианта, которые я могу придумать. Один из них - связать их через обратные вызовы. Другой - сделать вызовы синхронными, а не асинхронными.
Есть ли причина, по которой вы хотите, чтобы они выполнялись последовательно? Это замедлит работу.
Чтобы сделать вызов синхронным, вы установите для параметра async в вызове Ajax значение false. См. Документацию по адресу http://docs.jquery.com/Ajax/jQuery.ajax#options (щелкните вкладку параметров, чтобы увидеть их).
Установите для параметра async значение false, например,
$.ajax({ async: false /*, your_other_ajax_options_here */ });
Ссылка: Ajax / jQuery.ajax
Синхронные вызовы не обязательно медленнее, если у вас есть приложение, в котором AJAX-вызовы открываются, отправляются в сокет, а затем закрывают его, множественные вызовы сокета не имеют смысла, поскольку некоторые сокеты могут обрабатывать только одно соединение, и в этом случае постановка данных в очередь, чтобы они отправлялись только после завершения предыдущего вызова AJAX, означает гораздо более высокую пропускную способность.