Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как получать промежуточные результаты от процедуры (https://javascript.ru/forum/events/34092-kak-poluchat-promezhutochnye-rezultaty-ot-procedury.html)

TommyTunec 20.12.2012 08:54

Как получать промежуточные результаты от процедуры
 
Такс, два случая:
первый:
надо отрисовывать дорожки на карте Bing по мере принятия данных с сервера, делал без цикла, но данных много и ИЕ начинает выдавать сообщение о долго работающем скрипте. Сделал так, в надеже что дорожки будут последовательно появиляться, а нет :no: дорожки появляються только после отработки всей процедуры :yes: Как сделать чтоб дорожки сразу рисовались после получения команды нарисовать их, а не после всей процедуры.
while()
{
$.ajax({

success: function(result)
{
//принял данные, нарисовал на карте
}

})
}

второй:
при запуске сервиса грузиться карта Bing и сразу на ней рисуется порядка 50 пушпинов, как мне быстренько загрузить карту, вывести нотифи что надо еще чуть чуть подождать и так же последовательно рисовать по одному пушпины, на данный момент у меня при запуске сервиса все нах зависает на минуты 2 и видим только белый экран, а в конце карту уже со всеми пушпинами :-E

ОлегА 20.12.2012 09:11

и сколько у вас ajax запросов отправляется в цикле?
а вообще сделйте async : false может поможет

TommyTunec 20.12.2012 09:12

async : false
стоит.
цикл на данный момент порядка 50 раз проходит.

ОлегА 20.12.2012 09:15

ну так это же ппц какая нагрузка на сервер, нельзя что ли 1 раз отправить, получить, и обработать всё сразу в цикле с таймаутом допустим 0.5 секунд если вам надо что бы дорожка у вас на глазах рисовалась, а не сразу появлялась полной?

TommyTunec 20.12.2012 09:20

серверт отправляет обратно лист с 50 элементами, в каждом из них порядка 500-1000 пар координат, у жава скрипта иногда не срабатывает async : false и программа продолжает дальше работать и в какой то момент выдает что данных нет, причем при дебаге видно что сервер отправил данные жава скрипту, а потом вылазит сообщение от жс что данных нет

TommyTunec 20.12.2012 09:24

и к тому же, это веть ничего не изменит? если я сейчас не могу рисовать последовательно, как мне это поможет при полном приеме всех данных? внутри саксеса пробывал вот такоую штуку
$.notify.add("Работаем...", 3);
setTimeout (DrawPoints(device), 1000);
сет таим почему то выбрасывает из цикла, то есть рисуется только одна дорожка и прекращается работа процедуры

ОлегА 20.12.2012 09:25

ну так говорю же не отправляйте столько запросов серверу, он не успевает их отрабатывать, делайте 1 запрос, который будет давать ответ и будете его уже в цикле гонять

ОлегА 20.12.2012 09:27

setTimeout отрабатывает только 1 раз в вашем случаи через 1 сек, надо setInterval делать, но только не забыдь его вырубить после того как отработает всё что надо, а то он и после будет срабатывать, когда уже не надо

ОлегА 20.12.2012 09:28

setTimeout (DrawPoints(device), 1000); - так не пишут, надо так

setTimeout ( function(){ DrawPoints(device); }, 1000);

TommyTunec 20.12.2012 09:29

это про один запрос, жс почему то не силах его принять, отправляю жсоном, наверно у жс(или у аякса) есть какой то верхний предел по принятию данных за один раз?
>>серверт отправляет обратно лист с 50 элементами, в каждом из них порядка 500-1000 пар координат, у жава скрипта иногда не срабатывает async : false и программа продолжает дальше работать и в какой то момент выдает что данных нет, причем при дебаге видно что сервер отправил данные жава скрипту, а потом вылазит сообщение от жс что данных нет

ОлегА 20.12.2012 09:31

большой объем данных получается, уменьшить ни как?

TommyTunec 20.12.2012 09:39

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

ОлегА 20.12.2012 09:42

сделайте timeout после каждого рисования

ОлегА 20.12.2012 09:43

setTimeout(paint, 500) - paint срабоатет через 0.5 секунд, что то типа этого

TommyTunec 20.12.2012 09:47

в принципе все вопросы мои решаются если знать ответ на вот такой вопрос: как показать объект А до того как будет рисоваться Б, на данный момент в резльтате я вижу сразу объекты А и Б, хотелось бы чтобы нарисовалось А, и я это видел, потом появилось Б, без алерта
function Draw()
{
//рисуем объект А
//рисуем объект Б
}
<html>
<body onload = "Draw">
</body>
</html>
</html>

ОлегА 20.12.2012 09:56

через флаг

function Draw(flag)
{

if(flag == 'a'){
//рисуем объект А
Draw('b');
}
} else if(flag == 'b')
//рисуем объект Б
}
}

TommyTunec 20.12.2012 10:19

Draw('a') закончит работу только после Draw('b'), тоесть это не даст никакого эффекта. может есть какой то способ чз события, например DrawA.OnLoad(function () {DrawB;})

ОлегА 20.12.2012 10:25

Цитата:

Сообщение от TommyTunec
Draw('a') закончит работу только после Draw('b')

как это так?вы же сказали "хотелось бы чтобы нарисовалось А, и я это видел, потом появилось Б", так как в итоге надо?

TommyTunec 20.12.2012 11:20

01 function Draw(flag)
02 {
03
04 if(flag == 'a'){
05 //рисуем объект А
06 Draw('b');
07 }
08 } else if(flag == 'b')
09 //рисуем объект Б
10 }
11 }

Draw('a') закончит работу только после Draw('b'), тоесть это не даст никакого эффекта.

TommyTunec 20.12.2012 11:22

рисование Б будет ждать окончания Draw('a'), То бишь они одновременно нарисуются

ОлегА 20.12.2012 14:01

нихера не понял как надо

TommyTunec 21.12.2012 10:04

Олег, давай на ты.
Смотри.
(Я плохо знаю жс, поэтому возможно, что решение элементарное и лежит рядом)

<script>
Calculatiom1();//тут сложные вычисления, которые например выводяться с помощью document.write
alert('Первое вычисление завершено');
Calculatiom2();//тут сложные вычисления, которые например выводяться с помощью document.write
</script>
<html>
</html>
Именно такой пример я не пробывал, но у меня анлогичный случай. В результате браузер будет долго вычислять что-то, потом вылезет алерт, потом опять будет вычислять. И только после вычисления второго он покажет оба document.write. Мне же надо, чтобы первое вычисление заончилось, вывело свой результат, произошел алерт, затем после вычисления второго вывелся второй результат.

ОлегА 21.12.2012 10:25

ну так я правильно значит понял, я ж и говорю выводите результат после Calculatiom1(), потом выводите результат после Calculatiom2(), что именно в этом у тебя не получается?


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