我需要使用ajax从数据库填充下拉,Iam使用两个下拉列表,如果第一个下拉值被选中第二个下拉值(必须根据第一个下拉列表中选择的值从DB中检索) )必须要显示。 DAO(数据访问层)返回4个结果作为arraylist对象,但在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);
答案 0 :(得分:2)
你的问题是行
response.getWriter().write(fieldPositionDaoObj);
你正在直接在响应上编写java Obejct ..我认为fieldPositionDaoObj
是list或aray ..所以toString Representation是
(com.bean.QuestionInfoBean@23d275, com.bean.QuestionInfoBean@1ce15f6, com.bean.QuestionInfoBean@103fcaa, com.bean.QuestionInfoBean@c135d6)
其中com.bean.QuestionInfoBean@c135d6
是Java对象的字符串表示。
我认为你需要返回那里有 JSON 代表Java对象/列表/数组,你的代码才能运行
JSON(JavaScript Object Notation),是一种简单易读的数据交换格式。它在全球无数项目中很受欢迎并且实现,对于那些不喜欢XML的人来说,JSON是一个非常好的替代解决方案。
您的JSON表示应该看起来像
[First,Middle,Full,Last]
或
[{首先},{中东},{全},{最后}]
您可以编写自己的方法,例如public String getJSOnRepresentation();
然后再做
response.getWriter().write(fieldPositionDaoObj.getJSOnRepresentation());
<强> Sample example on What and how to code 强>
另见
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
答案 1 :(得分:0)
我尝试了下面提到的代码,现在工作正常。
JAVA SCRIPT:
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);
答案 2 :(得分:-1)
某些框架(例如ExtJs)允许您使用大量代码执行此操作。我能想到这样做的唯一方法是将第二个下拉框放在div
标记内。在选择第一个下拉框时,调用一个将发出ajax请求的函数。获得success
回复后,通过创建包含这些值的新下拉框,重写div
的内容。