Hello, this is my first post and I am also a web development noob. I apologize if this issue is basic.
I have a main.go file which contains a struct that contains an array. I would like to display all of the contents of the array within a separate .html file. I have managed to get it working without looping but I would like to display the entire array as the size and contents change. I will show the different iterations I have tried at the bottom.
Current working hard coded array contents
<h1>{{(index .Results 0).Title}}</h1>
<h1>{{(index .Results 0).ReleaseDate}}</h1>
<img src="https://image.tmdb.org/t/p/w500/{{(index .Results 0).PosterPath}}">
<h1>{{(index .Results 1).Title}}</h1>
<h1>{{(index .Results 1).ReleaseDate}}</h1>
<img src="https://image.tmdb.org/t/p/w500/{{(index .Results 1).PosterPath}}">
<h1>{{(index .Results 2).Title}}</h1>
<h1>{{(index .Results 2).ReleaseDate}}</h1>
<img src="https://image.tmdb.org/t/p/w500/{{(index .Results 2).PosterPath}}">
Struct in main.go file. Trying to access Results[]
type Movies struct {
TotalResults int `json:"total_results"`
Results []struct {
PosterPath string `json:"poster_path"`
ID int `json:"id"`
Title string `json:"title"`
Overview string `json:"overview"`
ReleaseDate string `json:"release_date"`
} `json:"results"`
}
Adding this for clarity.(no issues here) main.go function that handles the searching. GET request from movieDB API.
func search(w http.ResponseWriter, r *http.Request) {
var movies Movies
if r.Method != "POST" {
http.Redirect(w, r, "/", http.StatusSeeOther)
return
}
searchValue := r.FormValue("query")
//replace spaces with addition signs
searchResult := strings.Replace(searchValue, " ", "+", -1)
response, err := http.Get("https://api.themoviedb.org/3/search/movie?api_key=xxxREDACTEDxxx&query=" + searchResult)
if err != nil {
fmt.Printf("The HTTP request failed with error %s\n", err)
} else {
data, _ := ioutil.ReadAll(response.Body)
json.Unmarshal([]byte(data), &movies)
}
tpl.ExecuteTemplate(w, "search.html", movies)
}
Loop I've tried that doesn't compile because 'i' isn't recognized
<script>
for (var i in {{.Results}}) {
document.body.innerHTML = "<h1>" + {{.Results[i].Title}} + "</h1>"
}
</script>
This loop compiles but displays nothing
<script>
for (var i in {{.Results}}) {
document.body.innerHTML = "<h1>" + .Results[i].Title + "</h1>"
}
</script>
This loop displays 'undefined'
<script>
var arr = {{.Results}}
for (var i in arr) {
document.body.innerHTML = "<h1>" + arr[i].Title + "</h1>"
}
</script>
I am currently out of ideas and I am just having a hard time wrapping my head around getting the information from one place to another(and javascript in general). Any help would greatly be appreciated thank you.
Top comments (3)
I am not sure why do you need this to be in the script tag. Iterate the h1 as usual with the template. It does the magic
Ahhhhhh I see what you mean. I've been thinking about templates all wrong. I'm pretty sure I can get it fixed now. Thank you for the advice.
I am glad that helped. Happy hacking