Извините за заголовок вопроса, но я даже не знаю, как задать этот D;
Допустим, на моей странице есть какой-то формуляр для добавления данных в список, и каждый раз, когда вы хотите добавить новые данные, они сначала вставляются в базу данных, затем обновляется ваша страница (ужасный дизайн, но просто представьте себе для примера!).
Итак, у нас есть кнопка, которая выполняет запрос AJAX , Когда сервер получает запрос, он выполняет некоторую проверку и в конечном итоге возвращает успех. В успешной части AJAX я заканчиваю тем, что отправляю данные формул, которые были вставлены в поле ввода. Итак, с сервером выполняется 2 вызова: сначала запрос AJAX, затем отправка формы. Мой браузер занимает 3 секунды для отображения списка.
Теперь представьте, что я нажимаю кнопку 3 раза так быстро, что первый запрос AJAX даже не выполняется (Представьте себе метод запроса AJAX на сервере спит 1000, что дает мне время для этого). Через 6 секунд браузер обновляется, и список повторяет те же данные 3 раза. Я понимаю, почему данные появляются 3 раза, когда я создаю три разных потока, а код на сервере выполняется 3 раза (я вижу, что журналы появляются в консоли 3 раза).
Но я не понимаю действительно не понимаю, что происходит, когда первый AJAX запрос достигает метода "redirect" или "render". Почему рендеринг реальной страницы занимает 6 ~ секунд? Потому что я мог понять, чтобы увидеть 3 различных "refre sh" с задержкой 2 ~, но появляется круг загрузки, и мне просто нужно подождать. Меня не беспокоит «задержка», потому что способ кодирования ужасно плох, и он изменится в будущем, но я действительно хочу понять, почему это происходит, и как сервер обрабатывает несколько AJAX запросов когда дело доходит до рендеринга новой страницы.
Пример кода:
Вид:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>dfsfsd</title>
<g:javascript library='jquery' />
<r:layoutResources/>
</head>
<body>
<g:form url="[action:'addToDatabase',controller:'main']" id="addDataForm">
<label>Data Name</label>
<input type="text" name="dataName" id="inputDataName">
</g:form>
<button type="button" id="addToDatabaseButton">Add Data</button>
<script>
$("#addToDatabaseButton").on( "click", function() {
$.ajax({
url: "${createLink(controller: "main", action: "ajaxCheck")}",
type: "post",
cache: false,
success: function () {
$("#addDataForm").submit();
}
});
});
</script>
</body>
</html>
Сторона сервера:
class MainController {
def index() {
[]
}
def addToDatabase() {
log.error ("We recieve $params.dataName")
sleep 2000
redirect(controller: "main", action: "index")
}
def ajaxCheck (){
def map = [:]
map.put("result","OK")
render map as JSON
}
}
Теперь, там 2-секундная задержка, которая означает, что я вставляю что-то в базу данных. Есть log.error для отображения элемента, который я пытаюсь вставить. Как вы можете видеть, когда я набираю «Имя A» и нажимаю «Добавить данные», отображается значение, и через 2 секунды страница перезагружается.
Но если я продолжаю нажимать кнопку, задержка составит 2 секунды. обновляется, и я не понимаю, почему я не люблю смотреть браузер refre sh 3 раза или что-то в этом роде, почему только один раз?