# Movie Info App - OMDb API --- tags: Javascript relate --- ###### tags: `Javascript, jQuery` # 製作一個尋找電影的網站 ## 成品: ![](https://i.imgur.com/nBZ6USk.png) [成品網址]() ## 成品功能: 1.搜尋欄位可以尋找電影 2.找到之後會有另外出現一個頁面取代當前頁面 3.並且具有IMBD的超連結,還有回到搜尋頁功能 # HTML * 本網站有換頁功能 * 連接點使用JS處理(詳見下方`movieSelected()`) [index.html](https://github.com/chiehLiu/git-projects/blob/gh-pages/MovieInfoApp/index.html) [movie.html](https://github.com/chiehLiu/git-projects/blob/gh-pages/MovieInfoApp/movie.html) # CSS: * 主要處理width * dispaly * 文字圖片高度處理 [css 程式碼](https://github.com/chiehLiu/git-projects/blob/gh-pages/MovieInfoApp/css/main.css) # 取得OMDb API: [OMDb API](http://www.omdbapi.com/apikey.aspx?__EVENTTARGET=freeAcct&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE=%2FwEPDwUKLTIwNDY4MTIzNQ9kFgYCAQ9kFgICBw8WAh4HVmlzaWJsZWhkAgIPFgIfAGhkAgMPFgIfAGhkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYDBQtwYXRyZW9uQWNjdAUIZnJlZUFjY3QFCGZyZWVBY2N0oCxKYG7xaZwy2ktIrVmWGdWzxj%2FDhHQaAqqFYTiRTDE%3D&__VIEWSTATEGENERATOR=5E550F58&__EVENTVALIDATION=%2FwEdAAU%2BO86JjTqdg0yhuGR2tBukmSzhXfnlWWVdWIamVouVTzfZJuQDpLVS6HZFWq5fYpioiDjxFjSdCQfbG0SWduXFd8BcWGH1ot0k0SO7CfuulHLL4j%2B3qCcW3ReXhfb4KKsSs3zlQ%2B48KY6Qzm7wzZbR&at=freeAcct&Email=) ![](https://i.imgur.com/QrcVXGP.png) # JS: ## functions: ### `getMovies()` 使用 `$.ajax()` 方法 印出response之後取用裡面的資料並且填入DOM 主要使用資料有 ![](https://i.imgur.com/dHefE5Y.png) * movie.Poste * movie.Title * movie.imdbID 使用 `$.each(movies, (index, movie)` 逐個印出 * movies代表所有搜尋到的資料 * index 索引的部分也可以取得不過這邊沒有使用到 * movie 代表每一個被印出去的value --- ### `movieSelected()` 特別注意 `s=${searchText}` s的參數代表搜尋藉著電影title來尋找 ![](https://i.imgur.com/sWAloPl.png) `url: http://www.omdbapi.com/?s=${searchText}&apikey=c8fa2a97` 主要作用在於儲存電影id以及換頁 1.`sessionStorage` ![](https://i.imgur.com/uS0mFIk.png) 跟LocalStorage很像會把資料存到Application裡面並且 存放在 sessionStorage 的資料會在頁面結束時清空(也就是我們想要的結果) 主要使用的方法有 * `setItem` 把資料存入 * `getItem` 取出資料做使用 2.`window.location = 'movie.html';` 點擊按鈕後轉後到下一個html頁面 --- ### `getMovie()` 特別注意 `i=${movieId}` ![](https://i.imgur.com/HXffS48.png) i的參數代表搜尋藉著電影id來尋找 `url: https://www.omdbapi.com/?i=${movieId}&apikey=c8fa2a97` 處理得跟getMovies()差不多 * 提取資料 * 填入DOM * 製作兩個按鈕1.超連結去IMBD 2.回到搜尋頁 --- ## 事件監聽 ```javascript= $('#searchForm').submit((e) => { e.preventDefault(); let searchText = $('#searchText').val(); getMovies(searchText); }); ``` * 主要處理在searchForm的輸入的值 * 把收集到的值填入getMovues() ![](https://i.imgur.com/vJznbxB.png) ## JS完整程式碼: ```javascript= $(document).ready(() => { $('#searchForm').submit((e) => { e.preventDefault(); let searchText = $('#searchText').val(); getMovies(searchText); }); }); function getMovies(searchText) { $.ajax({ type: "GET", url: `http://www.omdbapi.com/?s=${searchText}&apikey=c8fa2a97`, dataType: "json", success: function (res) { console.log(res); let movies = res.Search; console.log(movies); let output = ''; $.each(movies, (index, movie) => { output += ` <div class="col-md-3"> <div class="well text-center"> <img src="${movie.Poster}"> <h5>${movie.Title}</h5> <a onclick="movieSelected('${movie.imdbID}')" class="btn btn-primary" href="#">Movie Details</a> </div> </div> `; }); $('#movies').html(output); }, error: function (err) { console.log(err); } }) }; function movieSelected(id) { sessionStorage.setItem('movieId', id); window.location = 'movie.html'; return false; } function getMovie() { let movieId = sessionStorage.getItem('movieId'); $.ajax({ type: "GET", url: `http://www.omdbapi.com/?i=${movieId}&apikey=c8fa2a97`, dataType: "json", success: function (res) { let movie = res; console.log(movie); let output = ` <div class="row"> <div class="col-md-4"> <img src="${movie.Poster}" class="thumbnail"> </div> <div class="col-md-8"> <h2>${movie.Title}</h2> <ul class="list-group"> <li class="list-group-item"><strong>Genre:</strong> ${movie.Genre}</li> <li class="list-group-item"><strong>Released:</strong> ${movie.Released}</li> <li class="list-group-item"><strong>Rated:</strong> ${movie.Rated}</li> <li class="list-group-item"><strong>IMDB Rating:</strong> ${movie.imdbRating}</li> <li class="list-group-item"><strong>Director:</strong> ${movie.Director}</li> <li class="list-group-item"><strong>Writer:</strong> ${movie.Writer}</li> <li class="list-group-item"><strong>Actors:</strong> ${movie.Actors}</li> </ul> </div> </div> <div class="row"> <div class="well"> <h3>Plot</h3> ${movie.Plot} <hr> <a href="http://imdb.com/title/${movie.imdbID}" target="_blank" class="btn btn-primary">View IMDB</a> <a href="index.html" class="btn btn-default">Go Back To Search</a> </div> </div> `; $('#movie').html(output); }, error: function (err) { console.log(err); } }) } ```