weixin_40729074 2018-04-06 01:41 采纳率: 100%
浏览 1060
已采纳

java前后台数据请求返回问题

图片说明![图片说明](https://img-ask.csdn.net/upload/201804/06/1522981219_852743.png)图片说明将后台list数据转化成jsonarray返回前台,前台访问list中元素的属性显示在下拉框中,执行只输出System.out.println("getDataset.java中2");哪里有问题?

后台.java代码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String test_name = request.getParameter("testname");
System.out.println("test_name: "+test_name);
DBController con = new DBController(test_name);
//查找list
System.out.println("进入前");
List list = con.select(test_name);
System.out.println("getDataset.java中");
System.out.println("list:"+list.get(0).getDatasetPath());
System.out.println("getDataset.java中2");
JSONArray list1=JSONArray.fromObject(list);
System.out.println("getDataset.java中3");
response.setCharacterEncoding("UTF-8");//解决显示中文乱码问题
PrintWriter writer = response.getWriter();
writer.write(list1.toString());
writer.flush();
System.out.println("list:"+list.get(0).getId());
}
前台.jsp代码

 <div class="form-group" id="select_now">
        <label class="col-xs-3 control-label">选择已有数据集</label>
        <div class="col-xs-3">  
            <select class="form-control" name="select_dataset" id="select_dataset" onclick="getdatasets();">
            </select>
        </div>
      </div>

function getdatasets(){
$.ajax({
    type : "POST",
    url:"<%=contextPath%>/getDatasets",
    data : {
        type : "0",
        testname : "自动分类",
    },
    dataType : "text",
    async : false,
    context : null,
    success : function(list) {
        alert(typeof list);
         alert("成功1");
        //下拉菜单选项显示数据库名,值为数据库的真实地址
        $("#select_dataset").html('');
        //alert("成功2");
        for(var i = 0; i<list.length; i++){
            var inner = "";
            //alert("成功3");
            inner += "<option value='" + list.get(i).getDatasetPath() +"'>" + list.get(i).getDataset() + "</option>";
            $("#select_dataset").append(inner);
        }
        list=[];
        alert("成功5");
    }

})

}

  • 写回答

6条回答 默认 最新

  • 尛淼 2018-04-06 02:27
    关注

    改了一下你的代码。至于java3没有执行到,你看原来的代码是不是在java3之前抛异常了protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String test_name = request.getParameter("testname");
    System.out.println("test_name: " + test_name);
    DBController con = new DBController(test_name);
    //查找list
    System.out.println("进入前");
    List list = con.select(test_name);
    if (list != null && !list.isEmpty()) {//非空处理,否则list为null时报空指针,或者长度为0时,下面的list.get(0)就会报下标越界
    System.out.println("getDataset.java中");
    System.out.println("list:" + list.get(0).getDatasetPath());
    System.out.println("getDataset.java中2");
    String jsonStr = JSON.toString(list);//一次转完,不用再把JSONArray toString
    System.out.println("getDataset.java中3");
    //response.setCharacterEncoding("UTF-8");//解决显示中文乱码问题
    PrintWriter writer = response.getWriter();
    writer.write(jsonStr);
    writer.flush();
    System.out.println("list:" + list.get(0).getId());
    }

    }
    

    function getdatasets() {
    $.ajax({
    type: "POST",
    url: "<%=contextPath%>/getDatasets",
    data: {
    type: "0",
    testname: "自动分类",
    },
    dataType: "json",//返回的是json格式的数据,用text貌似接收不到吧
    async: false,
    success: function (jsonData) {
    alert(typeof jsonData);
    alert("成功1");

                if (jsonData && jsonData != '[]') { //返回的数据有效。list不为null,undefined,'','[]'等时才说明有数据返回
                    var dataList = JSON.parse(jsonData);
                    //下拉菜单选项显示数据库名,值为数据库的真实地址
                    var select_dataset = $("#select_dataset");//对象获取一遍就行,没必要重复去解析获取对象,浪费性能
                    select_dataset.html('');
                    //alert("成功2");
    
                    var inner = "";
                    for (var i = 0; i < dataList.length; i++) {
                        //alert("成功3");
                        inner += "<option value='" + dataList.get(i).getDatasetPath() + "'>" + dataList.get(i).getDataset() + "</option>";
                    }
                    select_dataset.append(inner);//在循环里面一次拼接好,在这里给select一次赋值就行,没必要每个option都添加一次
                    //list = [];
                    alert("成功5");
                }
    
            }
    
        });
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源