Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2013, 10:40
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

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

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 это же значение попадёт только при следующем выборе. Где ошибка?
Ответить с цитированием
  #2 (permalink)  
Старый 14.06.2013, 10:50
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Как ты думаешь, что делает функция $.ajax() ? И моментально ли будет выполнена функция success?
Ответить с цитированием
  #3 (permalink)  
Старый 14.06.2013, 10:53
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Ну аякс посылает дату в контроллер Ajax... Не вижу причин почему бы и не вернуть результат мгновенно. Я логически не понимаю эту задержку на одно событие.
Ответить с цитированием
  #4 (permalink)  
Старый 14.06.2013, 10:58
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Нужно ствить ("#ex").html(resulaat) в succes и вызвать оттуда подобную функцию? Сейчас попробую
Ответить с цитированием
  #5 (permalink)  
Старый 14.06.2013, 11:02
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

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

Но есть ещё тут решение?
Ответить с цитированием
  #6 (permalink)  
Старый 14.06.2013, 11:20
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

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

catName = data.cat;	
return catName;


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

то varible1 у меня undefined.
Ответить с цитированием
  #7 (permalink)  
Старый 14.06.2013, 11:27
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

Сообщение от Faab
Я логически не понимаю эту задержку на одно событие.
Тут в принципе дело не в задержке, а в асинхронности события. Ты конечно можешь указать флаг async: false, но тогда у тебя будет вставать колом (подвисать) пользовательский интерфейс на время запроса. К примеру у меня пинг 200ms, так что для меня бы такие глюки были бы неприемлемы.
Ответить с цитированием
  #8 (permalink)  
Старый 14.06.2013, 11:33
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

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


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

Последний раз редактировалось Faab, 14.06.2013 в 11:47.
Ответить с цитированием
  #9 (permalink)  
Старый 14.06.2013, 12:30
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

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

Сообщение от Faab
Как узнать свой пинг?
Win+R, запускаем cmd, там вводим ping ya.ru
Вместо ya.ru можно указать любой интересующий другой сервер.
Ответить с цитированием
  #10 (permalink)  
Старый 14.06.2013, 19:12
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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

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 мсек
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать задержку отправки формы на javascript? Akimserg Общие вопросы Javascript 12 19.10.2015 13:15
Как реализовать задержку mxs89 Общие вопросы Javascript 3 04.06.2013 13:22
Поставить задержку к отправке сообщения tai jQuery 6 22.05.2013 07:45
Как установить задержку внутри цикла for - ? caca0 Javascript под браузер 2 29.05.2012 14:12
Как создать задержку перед .html() Could jQuery 1 17.07.2011 12:42