0

我需要使用 ajax 从数据库中填充一个下拉列表,我使用两个下拉列表,如果选择了第一个下拉值,则第二个下拉值(必须根据第一个下拉列表中选择的值从数据库中检索)必须有要显示。DAO(数据访问层)作为arraylist对象返回4个结果,但在http responsetext中它打印为对象而不是值。我尝试使用for循环来迭代它,但我无法实现它。请在这方面帮助我。

HTML 代码:

    // First Drop Down
    Question Field :<select name="ddlAddQuestionField" id='ddlAddQuestionField' onchange="getFieldPosition()">
        <option value=''>Select Question Field</option>
        <option value='Security Question'>Security Question</option>
        <option value='Personal Info'>Personal Info</option>
    </select>

    // Second DropDown

    User Field Position:<select name="userFieldPosition" id="userFieldPosition" disabled="disabled"> </select>

Javascript代码

function getFieldPosition(){

                    var fieldName =$("#ddlAddQuestionField").val();

                    if(window.XMLHttpRequest){
                        xmlhttp=new XMLHttpRequest();
                    } else {
                        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    xmlhttp.onreadystatechange=function() {

                        if(xmlhttp.readyState==4 && xmlhttp.status==200){

                            document.getElementById("userFieldPosition").disabled=false;                            
                            alert(xmlhttp.responseText);
                            var response =xmlhttp.responseText;

                            for(var i=0;i<response.length;i++) {
                                var elements = "<option value='"+response[i]+"'>"+response[i]+"</option>";
                                $("#userFieldPosition").append(elements);
                            }
                        }
                      }
                        xmlhttp.open("POST","ApplicationController",true);
                        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                        xmlhttp.send("fieldAction=fieldPosition&fieldName="+fieldName);
                }

小服务代码

fieldPositionObj = fieldPositionDaoObj.getFieldPosition(fieldName);   //Hitting the Dao

              // In dao it returns arraylist object.     

            response.setContentType("text/plain");  
                response.setCharacterEncoding("UTF-8"); 
                response.getWriter().write(fieldPositionDaoObj);
4

3 回答 3

2

你的问题是线

 response.getWriter().write(fieldPositionDaoObj);

您正在直接在 Response 上编写 java Obejct .. 我认为fieldPositionDaoObj是 list 或 aray .. 所以 toString 表示是

(com.bean.QuestionInfoBean@23d275, com.bean.QuestionInfoBean@1ce15f6, com.bean.QuestionInfoBean@103fcaa, com.bean.QuestionInfoBean@c135d6) 

com.bean.QuestionInfoBean@c135d6你的 Java 对象的 toString 表示在哪里。

我认为您需要返回的是Java Object/List/Array 的JSON表示,您的代码将起作用

JSON(JavaScript Object Notation),是一种简单易读的数据交换格式。它在全球无数项目中流行并实施,对于那些不喜欢 XML 的人来说,JSON 是一个非常好的替代解决方案。

您的 JSON 表示应如下所示

[第一、中、满、最后]

或者

[{First},{Middle},{Full},{Last}]

你可以编写自己的方法public String getJSOnRepresentation();

然后做

response.getWriter().write(fieldPositionDaoObj.getJSOnRepresentation());

关于什么和如何编码的示例

另见

http://json.org/java/ https://github.com/douglascrockford/JSON-java/blob/master/JSONString.java https://github.com/douglascrockford/JSON-java/blob/master/JSONArray .java https://github.com/douglascrockford/JSON-java/blob/master/JSONObject.java

于 2013-05-13T11:58:21.173 回答
0

我尝试了下面提到的代码,它现在工作正常。

JAVA脚本:

  if(xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById("userFieldPosition").disabled=false;                            
        var response = JSON.parse(xmlhttp.responseText);
        for(var i=0;i<response.length;i++){
            elements  += "<option value='"+response[i].fieldPosition+"'>"+response[i].fieldPosition+"</option>";
        }
        $("#userFieldPosition").append(elements);
        }
}

服务:

 Gson gson = new Gson();
 String json = new Gson().toJson(fieldPositionObj);
 response.getWriter().print(json);
于 2013-05-14T06:23:00.523 回答
-1

有一些框架,比如 ExtJs,可以让你不用太多代码就可以做到这一点。我能想到的唯一方法是将第二个下拉框放在div标签内。在选择第一个下拉框时,调用将发出 ajax 请求的函数。获得success响应后,div通过使用这些值创建一个新的下拉框来重写您的内容。

于 2013-05-13T11:19:16.947 回答