Отправка данных шаблона с использованием приложения типа контента / json in golang - PullRequest
0 голосов
/ 11 февраля 2020

Следующий код является неработающим фрагментом. 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, но я бы хотел этого избежать.

...