2012-06-27 6 views
0

У меня есть один вопрос о jquery ajax() .. Я создал сетку таблицы, и есть требование пропустить между ячейками с помощью клавиши табуляции. Сетка построена так, что нужно дважды вызвать ajax (для сохранения предыдущей ячейки и отображения ввода во втором). Моя проблема заключается в том, что когда кто-то редактирует ячейки с помощью вкладки, иногда происходит очень медленный ответ. Нормальный ответ составляет около 40-70 мс, а затем в том же случае ответ длиннее 1 секунды .. Почему это? Мне кажется, что сервер не обращает внимания, потому что эта проблема возникает чаще, когда есть задержка в редактировании текущей ячейки. Длинный ответ не вызван типом данных, отредактированными или похожими на это. Похоже, что это абсолютно случайный. Я не хочу переделывать сетку, потому что все работает хорошо, за исключением этой проблемы ... Спасибо!Ответ jquery ajax иногда медленный

+0

Вы говорите: «Сервер не обращает внимания» ... Вы изучали обмены с сервером, например, используя Firebug, инструменты разработчика Chrome или Fiddle? – fvu

+0

Да, но мне не удалось найти причину. Заголовки и данные обменов одинаковы в медленных и быстрых случаях. – Michal

+0

и как насчет времени? Есть ли существенная разница в времени ответа сервера? Если это так, вам придется посмотреть на сервер. – fvu

ответ

1

Я вижу два возможных подхода для решения этой проблемы.

  1. Модульность. Если вы можете, изолируйте сетку в прототипе песочницы, где ничего не реализовано, кроме того, что вам нужно для воспроизведения ошибки. Это легко, если ваш код является модульным, потенциально невозможным, если это не так.

    Второй способ изолировать поведение - фактически отключиться от сервера. Вот что я имею в виду: можно изменить ваш ajax, чтобы просто вернуть объект «mocked». Таким образом, вы знаете, что нет латентности или неожиданного типа данных. Это понятие называется «data-mocking» и похоже на установку Test Driven Development. Это докажет для вас, если что-то не так в обратном вызове ответа на запрос. Но я не думаю, что это так.

  2. События. По какой-то причине ваше описание звучит так, как будто это связано с событиями. Изоляция вашей сетки в прототипе может неожиданно решить эту проблему, если что-то сбито. Итак, вот мой совет в этом сценарии:

    A. Проверьте кросс-браузер ошибки. События могут вести себя по-разному в разных браузерах. Это может дать вам намек на основную причину.

    B. Шаг-Отладка вашего кода. Если возникает шквал событий, или если другой обработчик переходит в режим, когда это не следует, лучше всего поймать его в действии во время выполнения.

    C. Chrome, щелчок правой кнопкой мыши, проверка элемента, вкладка скриптов и установка точки останова - мощный рабочий процесс, который поможет решить эту проблему.

    D. Существует общий случай с настраиваемыми событиями, которые должны остановитьPropagation() или preventDefault(), которые будут отделять дополнительные действия от цепочки по стеку DOM обработчиков. Это может быть или не быть для вас, причина, по которой я упоминаю, что это - когда я сталкивался с ней в прошлом, она изначально выглядит случайной и трудной для воспроизведения. Here is a link to this information on MDN.

Надеюсь, что это поможет! Nash

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