各位朋友周末好,我在学习jquery的时候。遇到了一个问题。
我从后台action返回了一个json的字符串数据。
想在页面加载的时候为select添加初始值。但是始终没有任何效果。jsp页面 <dd>
<select class="combox" id="menuupperid" name="menu.upperid" class="required">
</select>
</dd><script type="text/javascript">
$(document).ready(function(){
$.ajax({
type: "POST",
url: "initMenu",
dataType: "json",
success: function(data){
//var jsonObj = jQuery.parseJSON(data);
//var jsonObj = eval("("+ data +")");
alert(data);
$("#menuupperid").empty();
$.each(data,function(index,value){
$("#menuupperid")[0].options.add(new Option(value.menuCname,value.id,false,false));
});
}
});
});
</script>当我的dataType返回的是json的时候。alert(data)将会弹出[object Object],[object Object],[object Object]信息。
而当我修改返回值类型为html的时候。alert(data)将会弹出字符串[{"xxx":xxx,"xxx":xxx,"xxx":xxx},{"xxx":xxx,"xxx":xxx,"xxx":xxx},{"xxx":xxx,"xxx":xxx,"xxx":xxx}]此类的信息。当我each的时候我查询value.menuCname和value.id的时候也能alert出正确的信息。但就是加载不到select上因为对JQUERY不是很熟。比对着api和网上的例子。但就是无法实现效果。希望大家能帮我看看。谢谢!!
我从后台action返回了一个json的字符串数据。
想在页面加载的时候为select添加初始值。但是始终没有任何效果。jsp页面 <dd>
<select class="combox" id="menuupperid" name="menu.upperid" class="required">
</select>
</dd><script type="text/javascript">
$(document).ready(function(){
$.ajax({
type: "POST",
url: "initMenu",
dataType: "json",
success: function(data){
//var jsonObj = jQuery.parseJSON(data);
//var jsonObj = eval("("+ data +")");
alert(data);
$("#menuupperid").empty();
$.each(data,function(index,value){
$("#menuupperid")[0].options.add(new Option(value.menuCname,value.id,false,false));
});
}
});
});
</script>当我的dataType返回的是json的时候。alert(data)将会弹出[object Object],[object Object],[object Object]信息。
而当我修改返回值类型为html的时候。alert(data)将会弹出字符串[{"xxx":xxx,"xxx":xxx,"xxx":xxx},{"xxx":xxx,"xxx":xxx,"xxx":xxx},{"xxx":xxx,"xxx":xxx,"xxx":xxx}]此类的信息。当我each的时候我查询value.menuCname和value.id的时候也能alert出正确的信息。但就是加载不到select上因为对JQUERY不是很熟。比对着api和网上的例子。但就是无法实现效果。希望大家能帮我看看。谢谢!!
直接测试的代码
<dd>
<select class="combox" id="menuupperid" name="menu.upperid" class="required">
</select>
</dd>
<script type="text/javascript">
$(document).ready(function () {
data = [{ "id": "1", "menuCname": "2", "xxx": "3" }, { "id": "12", "menuCname": "22", "xxx": "32"}];
$("#menuupperid").empty();
$.each(data, function (index, value) {
$("#menuupperid")[0].options.add(new Option(value.menuCname, value.id, false, false));
});
});
</script>
在 $("#menuupperid").empty(); 之前加一句 data=eval(data);
下面的
new Option(value.menuCname, value.id, false, false));这里的第一个参数要求是字串类型。而JSON中如果是字串类型,要求字串的值用双引号引起来,而你上面的显示,却没有一个引起来的值(引起来的是只是键名称)。所以修改一下返回的JSON格式,把字串类型的值用双引号引起来就差不多了。
谢谢各位大力帮助。
@Action(value = "/initMenu")
public String doInitMenu() {
String id = getRequest().getParameter("ID");
id = null == id ? "0" : id;
try {
getResponse().setCharacterEncoding("UTF-8");
String str = JsonUtil.getJsonStr(menuSvc.queryByUpperId(id));
str = "[{\"id\":\"1\",\"menuCname\":\"系统\"},{\"id\":\"2\",\"menuCname\":\"测试\"},{\"id\":\"3\",\"menuCname\":\"姓名\"}]";
PrintWriter out = getResponse().getWriter();
out.println(str);
System.out.println(str);
//out.flush();
//out.close();
} catch (IOException e) {
addActionError(e.toString());
} return NONE;
}页面代码没变。后台输出的str数据是
[{"id":"1","menuCname":"系统"},{"id":"2","menuCname":"测试"},{"id":"3","menuCname":"姓名"}]
难道说这种格式不是json数据?还是前端页面代码有问题呢?谢谢!!
我使用的是IE9,不过在兼容环境下和ie9版本中。都是无法添加到select中。难道这种添加的语法有错误?
data.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%
response.setCharacterEncoding("UTF-8");
String str = "[{\"id\":\"1\",\"menuCname\":\"系统\"},{\"id\":\"2\",\"menuCname\":\"测试\"},{\"id\":\"3\",\"menuCname\":\"姓名\"}]";
out.println(str);
%>url: "initMenu"改成我自己的“http://127.0.0.1:8080/SysManage/bak/data.jsp"IE8 和火狐下都可以
既然在each中alert是正确的,那说明数据是没有问题的.问题在于:
$("#menuupperid")[0].options.add(new Option(value.menuCname,value.id,false,false));
可以添加有问题.建议楼主调试一下,单独
$("#menuupperid")[0].options.add(new Option(value.menuCname,value.id,false,false));
调试看看.1.确定数据是否正确,在each中打印
2.确实向标签里添加子标签是否正确