前提・実現したいこと
現在、openbdという本の情報を取得できるapiを使用し、本のレビューアプリを作成しています。
実現したいこととしてはif文で取得した値のnullを判定し、「本の情報がありません」旨を表示させたいです。
発生している問題・エラーメッセージ
ソースコードのように記述していますが、nullを判定できず、条件分岐してくれません。
https://api.openbd.jp/v1/get?isbn=1241の様に適当な数字を入れ実行したところ、
ブラウザ上には[null]と表示されました。
chromeでの検証結果
[null] 0: null length: 1 __proto__: Array(0) concat: ƒ concat() constructor: ƒ Array() copyWithin: ƒ copyWithin() entries: ƒ entries() every: ƒ every() fill: ƒ fill() filter: ƒ filter() find: ƒ find() findIndex: ƒ findIndex() flat: ƒ flat() flatMap: ƒ flatMap() forEach: ƒ forEach() includes: ƒ includes() indexOf: ƒ indexOf() join: ƒ join() keys: ƒ keys() lastIndexOf: ƒ lastIndexOf() length: 0 map: ƒ map() pop: ƒ pop() push: ƒ push() reduce: ƒ reduce() reduceRight: ƒ reduceRight() arguments: (...) caller: (...) length: 1 name: "reduceRight" __proto__: ƒ () [[Scopes]]: Scopes[0] reverse: ƒ reverse() shift: ƒ shift() slice: ƒ slice() some: ƒ some() sort: ƒ sort() splice: ƒ splice() toLocaleString: ƒ toLocaleString() toString: ƒ toString() unshift: ƒ unshift() values: ƒ values() Symbol(Symbol.iterator): ƒ values() Symbol(Symbol.unscopables): {copyWithin: true, entries: true, fill: true, find: true, findIndex: true, …} __proto__: Object
存在しない数字を入れた場合のchrome developer tools上のエラー
Uncaught TypeError: Cannot read property 'summary' of null at buildHtml (books.self-cf274625d10f3ce57f6688d7617e8fe8605e8ef10ac2ff3e48f64e8444310545.js?body=1:3) at Object.<anonymous> (books.self-cf274625d10f3ce57f6688d7617e8fe8605e8ef10ac2ff3e48f64e8444310545.js?body=1:19) at fire (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:3269) at Object.fireWith [as resolveWith] (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:3399) at done (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9306) at XMLHttpRequest.<anonymous> (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9549) buildHtml @ books.self-cf274625d10f3ce57f6688d7617e8fe8605e8ef10ac2ff3e48f64e8444310545.js?body=1:3 (anonymous) @ books.self-cf274625d10f3ce57f6688d7617e8fe8605e8ef10ac2ff3e48f64e8444310545.js?body=1:19 fire @ jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:3269 fireWith @ jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:3399 done @ jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9306 (anonymous) @ jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9549 load (async) send @ jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9568 ajax @ jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9207 (anonymous) @ books.self-cf274625d10f3ce57f6688d7617e8fe8605e8ef10ac2ff3e48f64e8444310545.js?body=1:12 dispatch @ jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:5184 elemData.handle @ jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:4992
該当のソースコード
book
1$(document).on('turbolinks:load', function() { 2 function buildHtml(book) { 3 var image = '<img "width="150" height="150" + src="' + book[0].summary.cover + '">'; 4 return image; 5 } 6 var formResult = $('#new_review'); 7 $('#submit').on("click",function(e) { 8 e.preventDefault(); 9 var bookName = $('#get-book').find('#isbn').prop('value'); 10 var requestUrl = 'https://api.openbd.jp/v1/get?isbn='; 11 requestUrl += bookName + '&pretty'; 12 $.ajax({ 13 type:"GET", 14 url:requestUrl, 15 dataType:"json" 16 }) 17 .done(function(data) { 18 console.log(data) 19 var image = buildHtml(data); 20 if (data[0] != null){ 21 $('#book-name').val(data[0].summary.title); 22 $('#author-name').val(data[0].summary.author); 23 $('#image_url').val(data[0].summary.cover); 24 $('.book_image').append(image); 25 formResult.css('display', 'block'); 26 } 27 else{ 28 $('.result').append("<p>can't get information</p>") 29 } 30 }) 31 .fail(function() { 32 alert('情報の取得に失敗しました'); 33 }); 34 }); 35}); 36
試したこと
elseif文を追加し「data[0].summary.title == null」などにしても条件分岐してくれませんでした。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/14 04:10