html
1<!doctype html> 2<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> 3<head lang="jp"> 4<meta charset="utf-8"> 5<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 6<script th:src="@{/js/test_json.js}" id="selectNum"></script> 7<script th:src="@{/js/books.js}" id="selectNum"></script> 8</head> 9</head> 10<body> 11<form> 12<div class="result"> 13<table > 14<tr> 15<th>名前</th> 16<td><input type="text" id="name" name=""></td> 17<th>題名</th> 18<td><input type="text"id="sub_name" name="sub_name" ></td> 19</tr> 20<div> 21<input type="button" name="ajax" id="ajax" value="検索"> 22</div> 23</table> 24</div> 25<table> 26 <thead> 27 <tr><th>出版社</th><th>在庫</th></tr> 28 </thead> 29 <tbody class="resultList"> 30 </tbody> 31 <script type="text/javascript"> 32//<![CDATA[ 33 window.onload = function () { 34 var books = '[{ "cpn": "campany1", "bNum": "hoge1" }, { "cpn": "campany2", "bNum": "hoge2" }]'; 35 36 var bookss = JSON.parse(books); 37 $.each(bookss, function (index, book) { 38 $('.resultList').append('<tr><td>' + book.cpn + '</td><td>' + book.bNum + '</td></tr>') 39 }); 40}; 41//]]> 42</script> 43</table> 44</form> 45</body> 46</html>
js
1$(function(){ 2 // ajax button click 3 $('#ajax').on('click',function(){ 4 $.ajax({ 5 url:'/books', 6 type:'GET', 7 dataType: 'json', 8 data:{ 9 'name':$('#name').val(), 10 'sub_name':$('#sub_name').val() 11 } 12 }) 13 // ajaxリクエストが成功した時発動 14 .done( (data) => { 15 $.each(data, function (index, book) { 16 $('.resultList').append('<tr><td>' + book.cpn + '</td><td>' + book.bNum + '</td></tr>') 17 }); 18 19 // ajaxリクエストが失敗した時発動 20 .fail( (data) => { 21 $('result').html(data); 22 console.log(data); 23 }) 24 // ajaxリクエストが成功・失敗どちらでも発動 25 .always( (data) => { 26 27 }); 28 }); 29}); 30
json
1 2var books = [ 3{"cpn":"campany", "bNum":"hoge"} 4];
コードは上記のように変更いたしましたが、検索ボタンを押してからの表示ができませんでした。
fidderから確認してみましたが、送受信の確認もできませんでした。
ご教示いただきましたコードを書いたのですが、何がいけないのか教えていただきたいです。
どのような形でdata返してるんでしょうか
Map<String, String> params
Mapにつめて返したいです。
コントローラーはまだ作成してませんが、Mapでいくつもりです。
Map って何ですか? JSON ではないのですか?
Ajaxでサーバーサイドから返せるのは文字列です。MapそのままではなくJSONにするなど工夫は必要です。
ひとまず固定値でもいいのでモック作って返すくらいは作っておきましょう <コントローラ
Map というのをググって調べてみると java のオブジェクトのようですね。java は全く知らない自分が言うことですのでハズレかもしれんせんが、HTTP 通信で Map オブジェクトそのものが返せるとは思えません。JSON などにシリアライズしないとダメなのでは?
すいません、MapとJSONの使い方が理解できていないくMapと言ってしまいました。コントローラーではMapでもってきている例をいくつかみまして、Mapでできるのかなと思っておりました。
そうなのですね!知りませんでした!有難うございます。jsonでコントトーラーのモックを作成してみますm(__)m
その Map オブジェクトを JSON にシリアライズするライブラリはないのですか? フレームワークによってはそういうライブラリが用意されていると思うのですが。(ちなみに、.NET Framework にはあります。java にもあるのでは?)
検索してみましたが、ありました!!まだ理解ができていないのですが、そのようなものがあることも知りませんでしたので勉強になりました!ありがとうございます。
> jsonからの値を受けて、ajaxで表示するコードを書いてみましたが、
どこに書いてあるのですか?
何はともあれサーバーから送信されてくる JSON 文字列を書いてもらえませんか。それが分かれば java とか全く知らなくても JavaScript / jQuery を知っている人なら答えが書けると思いますよ。
Hoge hoge = new Hoge();
hoge.cpn = "campany";
hoge.bNum = "111";
すいません、上記の部分でjsonを書けたと思ってました、、
コードブロックのタイトルが「JSON」になっている箇所が2箇所ありますが、どちらもJSONフォーマットではないため、修正してください。
JSON 文字列とは何か、ごくごく基本的なところだけで良いので勉強してください。基本的な知識もないのではここのような掲示板では話が通じなくて解決するのは難しいですよ。
質問を何度も書き換えてますが、質問と回答のつじつまが合わなくなってきています。
例えば、yambejp さんの回答にある getjson() はすでに質問から消えてしまって話が分からなくなってしまっていますし、私の回答も、質問を書き換えたことによって話の辻褄が合わなくなりつつあります。
ここ Teratail は質問者さん専用の Q&A サイトではなく、情報を蓄積して後で検索などでここを訪れた人にも役に立つようにするのが目的のようです。なので、ここを初めて訪れる人が上から読んでいって話の辻褄が合わなくなるような質問の書き換えは避けていただくようお願いします。
あと、私に聞きたいことがあるなら、私の回答のコメント欄に質問を書いてください。質問欄に書かれても、私に何を聞きたいのか分かりません。
申し訳ありませんでした。。
了解しました。以後気をつけます。
有難うございます。jsとjsonとの連携が取れず困っております。原因がわからないので教えて頂きたいです
上にも書きましたが、私への質問はここに書くのではなく、私の回答のコメント欄に書いてください。その際、何に困ってるか、何が分かれば解決しそうか、もう少し詳しい情報を書いてください。