Следующий код является неработающим фрагментом. products
- это фрагмент длины n
. Когда код выполняется, шаблон login.html
выполняется с d
в качестве данных шаблона и отправляется клиенту с использованием стандартных библиотек templates.ExecuteTemplate(xxx, xxx, xxx)
. Когда пользователь впервые заходит на сайт, в шаблон загружаются только некоторые данные. Позже клиент отправит запрос ajax (xhr), и я хотел бы повторно выполнить шаблон с дополнительными данными.
...
d := &shopData{
Products: products,
}
err = templates.ExecuteTemplate(w, "login.html", d)
if err != nil {
fmt.Println(err)
}
...
Эта следующая функция используется в других частях программы для вернуть ответ клиенту после того, как он сделал запрос, используя ajax (xhr no jquery):
...
func ajaxResponse(w http.ResponseWriter, res map[string]string) {
w.Header().Set("Content-Type", "application/json")
err := json.NewEncoder(w).Encode(res)
if err != nil {
log.Println(err)
}
}
...
Я пытаюсь использовать функцию ajaxResponse
и повторно выполнить шаблон с новыми данными d
, без перезагрузки страницы.
...
func apiEndpoint(w http.ResponseWriter, r *http.Request) {
ajaxResponse(w, map[string]string{"error": "true"})
d := &shopData{
Products: products,
}
err = templates.ExecuteTemplate(w, "login.html", d)
if err != nil {
fmt.Println(err)
}
}
...
Попытка сделать это одновременно вызывает проблемы, и новый контент не загружается. Есть ли способ повторно выполнить шаблон с новыми данными, не перезагружая страницу?
Я подозреваю, что проблема может быть в заголовках, необходимых для отправки нескольких запросов разных типов.
Одно решение может быть просто отправить новые данные в ответе ajax, но я бы хотел этого избежать.