2009-10-21 4 views
0

Я использую prototype.js и его объект Ajax для реализации виджета с интерактивным графиком. Я генерирую XML-запрос для данных, которые хочет пользователь, POST его на сервер с помощью Ajax.request, и, похоже, он вечно работает с Firefox. Похоже, что консоль Firebug показывает POST-финиш с 200 OK примерно за 700 мс, но обработчик onInteractive(), который я установил (какой прототип запускается при ReadyState == 3), срабатывает несколько раз в течение следующих TWELVE SECONDS, а затем мои обработчики обработчика onSuccess данные.Почему запрос Ajax прототипа занимает много времени?

Кто-нибудь знает, что происходит здесь, прежде чем я вникаю в код?

+0

Сколько вы возвращаетесь в ответ? –

+0

О мегабайте текста XML, в зависимости от диапазона запросов. – Berry

+0

Быстрый скрипт awk позже показывает, что более компактное представление JSON будет примерно в 20 раз меньше, поэтому серверный скрипт здесь я прихожу. Я надеялся избежать этого - лучше иметь одну вещь для поддержания, чем два, но выигрыш в производительности будет стоить того. – Berry

ответ

0

Оказалось, что произошло то, что Firebug показывал завершение POST, когда readistate равнялся 4, но не сообщал о завершении всей транзакции, пока мой обработчик onSuccess не закончил, и с мегабайтом XML, который принимал довольно в то время как. Переключение на более компактном формате JSON представления вместо XML уменьшило утомительной XML разбора, более или менее:

eval(responseText); doGraph(); 

Спасибо за комментарии, ребята, они были не совсем то, что мне нужно, но они указали мне в праве и функция теперь работает очень гладко.

1

С помощью ReadyState 3 XHR-запрос все еще находится в процессе, так что он может запускать ваш обработчик onInteractive несколько раз. Что оно делает? Почему вы не можете использовать один обратный вызов и увольнять его на readyState === 4? Кроме того, вы можете попробовать использовать панель netbug (вкладка «Net» сверху), чтобы узнать, что занимает все это время.

+0

Все обработчики onInteractive - это журнал, который был запущен; это строго для отладки. Я пытался понять, почему так долго после того, как Firebug заявила, что XHR был закончен. Вкладка Net - хорошая идея, спасибо. – Berry

Смежные вопросы