• 締切済み

JavascriptとJavaの文字列引き渡し

JSPを使ってJavaメソッドを呼び出しそのリターン値として文字列(String)を受け取るコードを動かしたのですが(ServerはTomcat8)、受け取り側のJavascriptでは、objectとなってしまい、toString()メソッドを通してもobjectのままになってしまいます(alert()関数で確認)。以下に関係コードの抜粋を "Member.java"のクラスメソッド部 public static ArrayList listup() throws Exception { ArrayList result = new ArrayList(); InitialContext initCon; DataSource ds; Connection con; Statement stmt; ResultSet rs; try { initCon = new InitialContext(); } catch(Exception e) { throw(new Exception("Can\"t get legal context.")); } ds = (DataSource)initCon.lookup("java:comp/env/jdbc/bar"); con = ds.getConnection(); stmt = con.createStatement (); rs = stmt.executeQuery ("SELECT * FROM member ORDER BY id;"); Member aMember; while(rs.next()) { aMember = new Member(); aMember.setId(rs.getInt("id")); aMember.setFirst_name(rs.getString("first_name")); aMember.setLast_name(rs.getString("last_name")); aMember.setBirthday(rs.getString("birthday")); result.add(aMember); } rs.close(); stmt.close(); con.close(); return result; } public static String tojson(ArrayList list) { String result = new String(); int i = 0; result = result + "{\"member\":["; while( i<list.size()) { Member aMember = (Member)list.get(i++); result = result + "{"; result = result + "\"id\" : \"" + aMember.getId() + "\"," ; result = result + "\"first_name\" : \"" + aMember.getFirst_name() + "\"," ; result = result + "\"last_name\" : \"" + aMember.getLast_name() + "\"," ; result = result + "\"birthday\" : \"" + aMember.getBirthday() + "\"}" ; } result = result + "]}"; return result; "index.jsp" <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.silane.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8)"> <title>メンバー一覧</title> <script type="text/javascript"> <!-- function showMember(list) { var obj = JSON.parse(list); // var obj = JSON.parse('{"member":[{"id" : "0","first_name" : "name","last_name" : "hogehoge","birthday" : "19841116"}]} '); alert("reach"); alert(obj.member.length); for( i=0; i<obj.member.length; i++) { document.write("<TR>"); document.write("<TD>"+obj.member[i].id+"</TD>"); document.write("<TD>"+obj.member[i].last_name+"</TD>"); document.write("<TD>"+obj.member[i].first_name+"</TD>"); document.write("</TR>"); } } // --> </script> </head> <body> <%=Member.tojson(Member.listup()) %> <TABLE> <TR><TH>ID</TH><TH>姓</TH><TH>名</TH></TR> <script type="text/javascript"> var list="'"+<%=Member.tojson(Member.listup()) %>+"'"; showMember(list); </script> </TABLE> </body> </html> 結果としてですが、alert("reach");まで行かないのJSON.parese()がうまく実行できていないのだと考えています。 どうすればよいでしょうか?ご教授をお願いいたします。

みんなの回答

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.1

結論から言うと、下から6行目の var list="'"+<%=Member.tojson(Member.listup()) %>+"'"; を var list='<%=Member.tojson(Member.listup()) %>'; にすればいいんじゃないでしょうか。 >結果としてですが、alert("reach");まで行かないの >JSON.parese()がうまく実行できていないのだと考えています。 //var obj = JSON.parse('{"member":[{"id" : "0","first_name" : "name","last_name" : "hogehoge","birthday" : "19841116"}]} '); や <%=Member.tojson(Member.listup()) %> などと、あなたなりに確認しようとしているのだと思いますがそれでは不十分です。 初心者の方のようなので仕方がない部分もあるのかもしれませんが、「var list='<%=Member.tojson(Member.listup()) %>';」の次の行で「alert(list)」などとして文字列が正しくできているのかどうかを確かめるべきです。 JavaからJavaScriptに渡す際などは失敗しやすいものです。そこがきちんとできているかどうかは真っ先に確認するようにしましょう。

関連するQ&A