Как отправить запрос ajax до загрузки страницы

#javascript #ajax

Вопрос:

Я хочу проверить статус входа пользователя в систему с помощью ajax-запроса. В зависимости от того, вошел ли пользователь в систему, я хочу отобразить либо ввод имени пользователя/пароля, либо имя пользователя. В настоящее время запрос отправляется в body.onload, и индикатор prgoress отображается до тех пор, пока не поступит ответ. Есть ли лучший способ?


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

Комментарии:

1. Если у вас нет серверной обработки, как вы проверяете их логин?

Ответ №1:

Это похоже на операцию, которую сначала следует выполнить на сервере, прежде чем страница будет отрисована. Если у кого-то отключен javascript, что произойдет?

Комментарии:

1. Это можно сделать, просто это немного отличается от того, что было нормой. Если у них не включен javascript, они ничего не видят (потому что данные не загружаются). Но да, вы должны быть очень осторожны с таким подходом

2. Да, красные флаги всегда всплывают у меня в голове, когда что-либо, связанное с безопасностью/входом в систему, выполняется с помощью javascript.

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

Ответ №2:

Если вы не хотите зависеть от набора инструментов, вы можете создать свою собственную функцию DOMReady, которая выглядит примерно так:

/* Использование: DOMReady(ajaxFunc); */
функция DOMReady(f) {
if (!document.all) {
 document.addEventListener("DOMContentLoaded", f, ложь);
 } еще {
если (document.readystate == 'завершено') {
window.setTimeout(f, 0);
 }
 еще {
 //Добавить событие в onload только в том случае, если все остальное не удается
Прикрепить событие(окно, "загрузка", f);
 }
 }
}

Или для более сложного решения: http://snipplr.com/view/6029/domreadyjs/

Ответ №3:

Почему бы не проверить это до того, как пользователю будет предоставлен html-код?

Если вы просто используете статический HTML с Javascript, я бы предложил использовать jQuery и использовать $(документ).готово():

Ответ №4:

Я думаю, что это должно быть возможно, но это не рекомендуется. Правильнее всего сделать так, чтобы сервер полностью определил содержимое страницы еще до ее отправки.

Если вас задерживает медленная загрузка изображений или другого контента, отличного от HTML, ознакомьтесь с одной из различных библиотек JavaScript. Я всегда рекомендую jQuery, который имеет следующий синтаксис:

 $(document).ready(function() {
  // The DOM is fully loaded now, but images might still be loading.
});
 

Ответ №5:

Я считаю, что если вы используете встроенный javascript, он должен быть выполнен, как только он встретится:

 <HTML><HEAD>...</HEAD>
<BODY>
<script>
document.write("This is written before anything else");
</script>
This come later.
</BODY>
</HTML>