Как получать промежуточные результаты от процедуры
Такс, два случая:
первый: надо отрисовывать дорожки на карте Bing по мере принятия данных с сервера, делал без цикла, но данных много и ИЕ начинает выдавать сообщение о долго работающем скрипте. Сделал так, в надеже что дорожки будут последовательно появиляться, а нет :no: дорожки появляються только после отработки всей процедуры :yes: Как сделать чтоб дорожки сразу рисовались после получения команды нарисовать их, а не после всей процедуры. while() { $.ajax({ success: function(result) { //принял данные, нарисовал на карте } }) } второй: при запуске сервиса грузиться карта Bing и сразу на ней рисуется порядка 50 пушпинов, как мне быстренько загрузить карту, вывести нотифи что надо еще чуть чуть подождать и так же последовательно рисовать по одному пушпины, на данный момент у меня при запуске сервиса все нах зависает на минуты 2 и видим только белый экран, а в конце карту уже со всеми пушпинами :-E |
и сколько у вас ajax запросов отправляется в цикле?
а вообще сделйте async : false может поможет |
async : false
стоит. цикл на данный момент порядка 50 раз проходит. |
ну так это же ппц какая нагрузка на сервер, нельзя что ли 1 раз отправить, получить, и обработать всё сразу в цикле с таймаутом допустим 0.5 секунд если вам надо что бы дорожка у вас на глазах рисовалась, а не сразу появлялась полной?
|
серверт отправляет обратно лист с 50 элементами, в каждом из них порядка 500-1000 пар координат, у жава скрипта иногда не срабатывает async : false и программа продолжает дальше работать и в какой то момент выдает что данных нет, причем при дебаге видно что сервер отправил данные жава скрипту, а потом вылазит сообщение от жс что данных нет
|
и к тому же, это веть ничего не изменит? если я сейчас не могу рисовать последовательно, как мне это поможет при полном приеме всех данных? внутри саксеса пробывал вот такоую штуку
$.notify.add("Работаем...", 3); setTimeout (DrawPoints(device), 1000); сет таим почему то выбрасывает из цикла, то есть рисуется только одна дорожка и прекращается работа процедуры |
ну так говорю же не отправляйте столько запросов серверу, он не успевает их отрабатывать, делайте 1 запрос, который будет давать ответ и будете его уже в цикле гонять
|
setTimeout отрабатывает только 1 раз в вашем случаи через 1 сек, надо setInterval делать, но только не забыдь его вырубить после того как отработает всё что надо, а то он и после будет срабатывать, когда уже не надо
|
setTimeout (DrawPoints(device), 1000); - так не пишут, надо так
setTimeout ( function(){ DrawPoints(device); }, 1000); |
это про один запрос, жс почему то не силах его принять, отправляю жсоном, наверно у жс(или у аякса) есть какой то верхний предел по принятию данных за один раз?
>>серверт отправляет обратно лист с 50 элементами, в каждом из них порядка 500-1000 пар координат, у жава скрипта иногда не срабатывает async : false и программа продолжает дальше работать и в какой то момент выдает что данных нет, причем при дебаге видно что сервер отправил данные жава скрипту, а потом вылазит сообщение от жс что данных нет |
большой объем данных получается, уменьшить ни как?
|
если я вставлю алерт внутри этого саксеса все рисуется как мне бы хотелось, только приходиться кажлый раз тыкать по окошку алерта, надо вот так же, только чтоб вместо окошка алерта в уголку вылезало и само пропадало сообщение что для такого то устройства данные нарисовались
|
сделайте timeout после каждого рисования
|
setTimeout(paint, 500) - paint срабоатет через 0.5 секунд, что то типа этого
|
в принципе все вопросы мои решаются если знать ответ на вот такой вопрос: как показать объект А до того как будет рисоваться Б, на данный момент в резльтате я вижу сразу объекты А и Б, хотелось бы чтобы нарисовалось А, и я это видел, потом появилось Б, без алерта
function Draw() { //рисуем объект А //рисуем объект Б } <html> <body onload = "Draw"> </body> </html> </html> |
через флаг
function Draw(flag) { if(flag == 'a'){ //рисуем объект А Draw('b'); } } else if(flag == 'b') //рисуем объект Б } } |
Draw('a') закончит работу только после Draw('b'), тоесть это не даст никакого эффекта. может есть какой то способ чз события, например DrawA.OnLoad(function () {DrawB;})
|
Цитата:
|
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'), тоесть это не даст никакого эффекта. |
рисование Б будет ждать окончания Draw('a'), То бишь они одновременно нарисуются
|
нихера не понял как надо
|
Олег, давай на ты.
Смотри. (Я плохо знаю жс, поэтому возможно, что решение элементарное и лежит рядом) <script> Calculatiom1();//тут сложные вычисления, которые например выводяться с помощью document.write alert('Первое вычисление завершено'); Calculatiom2();//тут сложные вычисления, которые например выводяться с помощью document.write </script> <html> </html> Именно такой пример я не пробывал, но у меня анлогичный случай. В результате браузер будет долго вычислять что-то, потом вылезет алерт, потом опять будет вычислять. И только после вычисления второго он покажет оба document.write. Мне же надо, чтобы первое вычисление заончилось, вывело свой результат, произошел алерт, затем после вычисления второго вывелся второй результат. |
ну так я правильно значит понял, я ж и говорю выводите результат после Calculatiom1(), потом выводите результат после Calculatiom2(), что именно в этом у тебя не получается?
|
Часовой пояс GMT +3, время: 06:01. |