TLDR : Можно ли каким-либо образом эмулировать событие onreadystatechange
для синхронных запросов без зависания браузера, поскольку оно не запускается в Firefox?
~~~~~
Я создал веб-форму, которая требует проверки и получения некоторых элементов с сервера перед отправкой.
Что я делаю сейчас, так это 'onsubmit'
Я запускаю ajax-запрос к своемуна сервер, отправьте данные формы, проанализируйте их на стороне сервера и верните в форму уникальный проверочный номер и хэш md5.
Способ работы заключается в том, что форма должна получить ответ и затем продолжитьотправить форму.Я должен отметить, что фактическая отправка формы - это обычная POST
отправка без ajax - форма отправляется на сервер вне моего контроля.
Полагаю, мне нужно выполнить синхронный запрос ajax - не асинхронный, как эточасто используется для.Дело в том, что форму никогда не следует отправлять до получения ответа, просто потому, что она не удастся, так как ответ содержит важные поля, которые будет искать сервер на другой стороне.
Я тестировал Chrome, и все кажетсяхорошо работать с синхронными запросами.Я делаю запрос и onreadystatechange
запускаю обработчик для анализа ответа.
Но Firefox не запускает событие onreadystatechange
в синхронных запросах.Это поведение наблюдается в версии 1.5 или около того.
Как я уже видел, большинство людей в какой-то момент запускают обработчик - потому что ответ получен и находится в DOM (responseText).просто событие onreadystatechange
не запускается.
Но это не работает для меня: в зависимости от того, где в коде, который я запускаю, ответ может быть недоступен, поэтому его синтаксический анализ не удастся.
Я испробовал два решения, оба из которых плохие:
- Используйте синхронный запрос и поместите обработчик в цикл while, ожидая ответа.
- Использовать асинхронный запрос и иметь некоторое время (myvariable);ждать, пока ответ не придет (myvariable - это ответ, который я получаю от сервера, после обработки responseText.
Оба из них, конечно, приводят к зависанию Firefox в течение довольно долгого времени, так как Javascript ждет вцикл while
. В конце концов, он работает нормально, если защита Firefox от замерзания не срабатывает и не говорит, что скрипт на этой странице не отвечает.
Что бы вы предложили? МожетЯ делаю цикл while, не замораживая браузеры? Может быть, опросник, который не опрашивает каждую миллисекунду, как цикл while, но, скажем, каждую 1 секунду, чтобы скрипт не зависал?