Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обясните задержку (https://javascript.ru/forum/jquery/39072-obyasnite-zaderzhku.html)

Faab 14.06.2013 11:40

Обясните задержку
 
Вот простой пример:

function detectSelectCat(categoriesForm){
     $.ajax({
            type: "POST",
            data: {categoriesForm: categoriesForm},
            url: "/ajax/selectparentcat",
            dataType: "json",
            success: function(data)
			{
                catName = data.cat;				
            }
            
        });
        
};

    $("#parentCategories").change(function(){
        var categoriesForm = $(this).val();
        detectSelectCat(categoriesForm);
        $("#ex1").html(categoriesForm);
        $("#ex2").html(catName);
    });


При выборк значения на выпадающем списке parentCategories, значение выводится моментально в #ex1. А в #ex2 это же значение попадёт только при следующем выборе. Где ошибка?

danik.js 14.06.2013 11:50

Как ты думаешь, что делает функция $.ajax() ? И моментально ли будет выполнена функция success?

Faab 14.06.2013 11:53

Ну аякс посылает дату в контроллер Ajax... Не вижу причин почему бы и не вернуть результат мгновенно. Я логически не понимаю эту задержку на одно событие.

Faab 14.06.2013 11:58

Нужно ствить ("#ex").html(resulaat) в succes и вызвать оттуда подобную функцию? Сейчас попробую

Faab 14.06.2013 12:02

Хорошо.. так всё работает (усли ставлю html() в succes).

Но есть ещё тут решение?

Faab 14.06.2013 12:20

Вот если в succes ставлю

catName = data.cat;	
return catName;


а ниже
variable1 = detectSelectCat(categoriesForm);

то varible1 у меня undefined.

danik.js 14.06.2013 12:27

Цитата:

Сообщение от Faab
Ну аякс посылает дату в контроллер Ajax... Не вижу причин почему бы и не вернуть результат мгновенно

А пинг до сервера у тебя стало быть нулевой? И страницы в браузере у тебя открываются мгновенно?

Цитата:

Сообщение от Faab
Я логически не понимаю эту задержку на одно событие.

Тут в принципе дело не в задержке, а в асинхронности события. Ты конечно можешь указать флаг async: false, но тогда у тебя будет вставать колом (подвисать) пользовательский интерфейс на время запроса. К примеру у меня пинг 200ms, так что для меня бы такие глюки были бы неприемлемы.

Faab 14.06.2013 12:33

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


Как узнать свой пинг?

danik.js 14.06.2013 13:30

Цитата:

Сообщение от Faab
Так значит код верный, просто не успевает срабатывать функция ajax?

Образно говоря, да. Говоря корректно - success функция вызывается по асинхронному событию, а значит будет отработана как минимум после выполнения текущего исполняемого кода.

Цитата:

Сообщение от Faab
В принципе в succes я прсото обращаюсь к новой фушкции. Это на мой взгляд правильное решение.

Так и есть. В асинхронном программировании сплошь и рядом используются callback-функции.

Цитата:

Сообщение от Faab
Как узнать свой пинг?

Win+R, запускаем cmd, там вводим ping ya.ru
Вместо ya.ru можно указать любой интересующий другой сервер.

bes 14.06.2013 20:12

Цитата:

Сообщение от danik.js
К примеру у меня пинг 200ms, так что для меня бы такие глюки были бы неприемлемы.

для меня тоже :D

Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\bes>ping ya.ru
При проверке связи не удалось обнаружить узел ya.ru.
Проверьте имя узла и повторите попытку.

C:\Users\bes>ping ya.ru
При проверке связи не удалось обнаружить узел ya.ru.
Проверьте имя узла и повторите попытку.

C:\Users\bes>ping ya.ru

Обмен пакетами с ya.ru [87.250.250.3] с 32 байтами данных:
Ответ от 87.250.250.3: число байт=32 время=919мс TTL=45
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.

Статистика Ping для 87.250.250.3:
    Пакетов: отправлено = 4, получено = 1, потеряно = 3
    (75% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 919мсек, Максимальное = 919 мсек, Среднее = 919 мсек

C:\Users\bes>ping ya.ru

Обмен пакетами с ya.ru [87.250.250.3] с 32 байтами данных:
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Ответ от 87.250.250.3: число байт=32 время=944мс TTL=45

Статистика Ping для 87.250.250.3:
    Пакетов: отправлено = 4, получено = 1, потеряно = 3
    (75% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 944мсек, Максимальное = 944 мсек, Среднее = 944 мсек

C:\Users\bes>ping ya.ru

Обмен пакетами с ya.ru [87.250.250.3] с 32 байтами данных:
Ответ от 87.250.250.3: число байт=32 время=382мс TTL=45
Ответ от 87.250.250.3: число байт=32 время=527мс TTL=45
Ответ от 87.250.250.3: число байт=32 время=484мс TTL=45
Ответ от 87.250.250.3: число байт=32 время=700мс TTL=49

Статистика Ping для 87.250.250.3:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 382мсек, Максимальное = 700 мсек, Среднее = 523 мсек

C:\Users\bes>ping ya.ru

Обмен пакетами с ya.ru [87.250.250.3] с 32 байтами данных:
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Ответ от 87.250.250.3: число байт=32 время=1787мс TTL=49
Ответ от 87.250.250.3: число байт=32 время=3208мс TTL=45

Статистика Ping для 87.250.250.3:
    Пакетов: отправлено = 4, получено = 2, потеряно = 2
    (50% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 1787мсек, Максимальное = 3208 мсек, Среднее = 2497 мсек

C:\Users\bes>ping ya.ru

Обмен пакетами с ya.ru [87.250.250.3] с 32 байтами данных:
Превышен интервал ожидания для запроса.
Ответ от 87.250.250.3: число байт=32 время=3369мс TTL=49
Ответ от 87.250.250.3: число байт=32 время=2645мс TTL=49
Превышен интервал ожидания для запроса.

Статистика Ping для 87.250.250.3:
    Пакетов: отправлено = 4, получено = 2, потеряно = 2
    (50% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 2645мсек, Максимальное = 3369 мсек, Среднее = 3007 мсек

C:\Users\bes>ping ya.ru

Обмен пакетами с ya.ru [87.250.250.3] с 32 байтами данных:
Ответ от 87.250.250.3: число байт=32 время=3128мс TTL=45
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Ответ от 87.250.250.3: число байт=32 время=1587мс TTL=49

Статистика Ping для 87.250.250.3:
    Пакетов: отправлено = 4, получено = 2, потеряно = 2
    (50% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 1587мсек, Максимальное = 3128 мсек, Среднее = 2357 мсек


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