0

都市のすべての名前を取得し、json 形式の文字列を返すこの Web サービスがあります。

public  String  getDataForTowns( ) throws ClassNotFoundException 
{   
   String  strXml = "";

        Class.forName("org.postgresql.Driver");

            try 
            {
                conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/plovdivbizloca", "postgres", "tan");
            }   

        catch (SQLException ex) {
            ex.printStackTrace();
        }

        Statement mystmt = null;
        String selectQuery = "select * from municipality_id";
        try {
            mystmt = conn.createStatement();
            ResultSet mysr = mystmt.executeQuery(selectQuery);

            ResultSetMetaData rsmd = mysr.getMetaData();
            int colCount = rsmd.getColumnCount();
            int numberrow = 0;

            strXml += "{\"rows\": [";
            while (mysr.next()) 
            {               
                    String townname = mysr.getString(2);
                    String townid=mysr.getString(1);

                    strXml += "{\"town\":\"" + townname
                            + "\", \"id\":" + townid + "},";


                //strXml += ",";
            }
            strXml += "]}";
        } 

        catch (Exception ex) 
        {
        }

        return strXml;
    }

クライアント側にはこの機能があり、アラートステートメントで「無効な文字」という例外が発生します。

function loadTownSelect()
    {
         select =  document.getElementById('sphSel');
         createXMLHttpRequest();

         var txtDrop = new Array();
         var idDrop= new Array();

         xmlhttp.onreadystatechange = function() 
        { 
            if (xmlhttp.readyState==4 && xmlhttp.status==200) 
            {
                alert(xmlhttp.responseText);
                var xmlObj = xmlhttp.responseXML;   

                var textXML = xmlObj.documentElement.firstChild.firstChild.nodeValue;
                alert(textXML);

                var nwresp = JSON.parse(textXML);
                alert (nwresp.rows[2].town);               
            }
        }

        var url = "http://localhost:9091/localbusscat/services/localbusscat/getDataForTowns";
        xmlhttp.open("GET", url, true);
        xmlhttp.send(); 
    }
4

1 に答える 1

1

サーバー側のコードは、すべての「オブジェクト リテラル」の後にコンマを追加します。最後のものであっても、コンマで終わるべきではありません。この余分なコンマにより、クライアント側で文字列を解析するときにエラーが発生JSON.parse()します

+ "\", \"id\":" + townid + "},";
-----------------------------^ 
于 2013-02-23T15:39:41.030 に答える