这是Ajax请求,alert(data)时,没有反应!
这是JSON返回数据:
请求路径:http://localhost:8080/admin/region/region!loadNext.do
错在哪里呢?
20 个解决方案
#2
我按照你的方法改了果然可以了、但是在each时报length为空或不是对象、下拉菜单只添加了<--请选择-->
其余的值没有新增成功
#3
没注意看,你的JSON结构也错了,数组的键名称没有指定。。
加上value
{"success":true, "value":[......
加上value
{"success":true, "value":[......
#4
我现在的json:
{"success":true,"value":[{"id":"2","regionType":"1","regionNameZh":"北京市","regionParentId":"3525"}]"}
jquery代码:
$.ajax({
type : "POST",
url : "../region/region!loadNext.do",
dataType : "json",
complete : function(data) {
$("#habitatRegion2").empty();
$("#habitatRegion2").append("<option value=''>--请选择--</option>");
var jsonData = unescape(data.responseText);
//使用$each(data,function(index,item) 这种方式时,alert(item.regionNameZh) 是undefine
//使用$each(data.value,function(index,item) 这种方式时,报错:length为空或不是对象
//使用$each(jsonData,function(index,item) 这种方式时,alert(item.regionNameZh) 是undefine
//使用$each(jsonData.value,function(index,item) 这种方式时,报错:length为空或不是对象
$.each(jsonData, function(index, item){
alert(item.regionNameZh);
//$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
}
到底是为什么,我很纠结啊!
#5
$.each(jsonData
改为$.each(jsonData.value
改为$.each(jsonData.value
#6
var jsonData = unescape(data.responseText);
这句有问题,data参数已经是json对象了,不需要再声明jsonData,而且生成json对象时eval,不是unescape
$.each( data.value, function(index, item){
alert(item.regionNameZh);
//$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
。
{"success":true,"value":[{"id":"2","regionType":"1","regionNameZh":"北京市","regionParentId":"3525"}] "}
这里多了一个",不知道是不是手误打上去的
这句有问题,data参数已经是json对象了,不需要再声明jsonData,而且生成json对象时eval,不是unescape
$.each( data.value, function(index, item){
alert(item.regionNameZh);
//$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
。
{"success":true,"value":[{"id":"2","regionType":"1","regionNameZh":"北京市","regionParentId":"3525"}] "}
这里多了一个",不知道是不是手误打上去的
#7
前辈,我按照你的方法改了,我的java方法返回值是String,我在return jsonStr之前还out.write(jsonStr)
$each data时也改成data.value,并且在$each之前我alert一下data,弹出的是[object XMLHttpRequest],但是确认后,下拉菜单没有添加成功,报错为:length为空或不是对象 jquery.min.js 32行
#8
success的data参数不可能是XMLHttpRequest对象啊,要么字符串,要么就jquery处理后的json对象
直接浏览器访问../region/region!loadNext.do输出的内容是什么?是修改好后的json格式的字符串数据没有?
直接浏览器访问../region/region!loadNext.do输出的内容是什么?是修改好后的json格式的字符串数据没有?
#9
直接访问,打印的就是{"success":true,"value":[{"id":"2","regionType":"1","regionNameZh":"北京市","regionParentId":"3525"}]}这种格式的字符串
#10
那应该木有问题啊,是执行到success回调了吧,那么success:function(
data),data参数不会是ajax对象的
楼主什么版本的jquery?
楼主什么版本的jquery?
#11
重新梳理一下:
java代码(json格式进行了修改。去掉了succes:true,value:):
struts.xml配置
jsp页面代码:
java代码(json格式进行了修改。去掉了succes:true,value:):
public String loadNext()
{
if (region == null)
{
region = new Region();
region.setRegionType(1);
//region.setParentId(0);
}
regions = regionServiceImpl.getNextList(region);
StringBuffer sb = new StringBuffer();
sb.append("[");
if (regions.size() > 0)
{
int size = regions.size();
int count = 0;
for (Region region : regions)
{
count++;
if (region.getPassed() == 0)
{
sb.append("{");
sb.append("\"id\":\"" + region.getId() + "\",");
sb.append("\"regionType\":\"" + region.getRegionType() + "\",");
sb.append("\"regionNameZh\":\"" + region.getRegionNameZh()
+ "\",");
sb.append("\"regionParentId\":\"" + region.getParentId());
sb.append("\"}");
if (size != count)
{
sb.append(",");
}
}
}
}
sb.append("]");
regionStr = sb.toString();
response.setCharacterEncoding("utf-8");
PrintWriter out = null;
try
{
out = response.getWriter();
out.print(regionStr);
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
out.flush();
out.close();
}
return null;
}
struts.xml配置
<package name="region" extends="struts-default">
<action name="region_*" class="com.beyondsoft.esite.action.region.RegionAction" method="{1}">
</action>
</package>
jsp页面代码:
$.ajax({
type : "POST",
url : "../region/region!loadNext.do",
dataType : "json",
success : function(data) {
$("#habitatRegion2").empty();
$("#habitatRegion2").append("<option value=''>--请选择--</option>");
alert(data) //弹出是 object XMLHttpRequest
$.each(data.value, function(i, item){ //在这里就报错:length为空或不是对象
alert(item.regionNameZh);
$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
}
});
#12
alert(data) //弹出是 object XMLHttpRequest,success回调函数的参数没见过有传递ajax对象
//如果确实是xhr对象,你的jquery应该是被改动过了。
alert(data.responseText) //输出看看什么内容
//如果data为xhr,只能eval动态生成json对象了
data=eval('('+data.responseText+')')
$.each(data, function(i, item){ //在这里就报错:length为空或不是对象
alert(item.regionNameZh);
$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
#13
$.post("请求url",function(data){
$.each(data.Data,function(i,item){
alert(item.id);
});
},"json");
$.each(data.Data,function(i,item){
alert(item.id);
});
},"json");
#14
是不是忘记添加json.js的引用了
#15
换一种呢
$.ajax({
....,
dataType:'text',
success:function(data){
rst_json = eval('('+data+')');
}
})
#16
success:function(datas)的success和:之间多打了空格。。。是这个原因,我被坑了好久
#17
我也被这个空格问题坑了
#18
{"success":true} 这是我的 返回结果,没空格 也是双引号 可还就总进error 不进success里 到现在 坑了一天了 求解答啊
#19
楼主解决了吗?我现在也被这个问题坑了
#20
有可能是访问跨域问题,API后台需要允许这个
#21
#1
#2
我按照你的方法改了果然可以了、但是在each时报length为空或不是对象、下拉菜单只添加了<--请选择-->
其余的值没有新增成功
#3
没注意看,你的JSON结构也错了,数组的键名称没有指定。。
加上value
{"success":true, "value":[......
加上value
{"success":true, "value":[......
#4
我现在的json:
{"success":true,"value":[{"id":"2","regionType":"1","regionNameZh":"北京市","regionParentId":"3525"}]"}
jquery代码:
$.ajax({
type : "POST",
url : "../region/region!loadNext.do",
dataType : "json",
complete : function(data) {
$("#habitatRegion2").empty();
$("#habitatRegion2").append("<option value=''>--请选择--</option>");
var jsonData = unescape(data.responseText);
//使用$each(data,function(index,item) 这种方式时,alert(item.regionNameZh) 是undefine
//使用$each(data.value,function(index,item) 这种方式时,报错:length为空或不是对象
//使用$each(jsonData,function(index,item) 这种方式时,alert(item.regionNameZh) 是undefine
//使用$each(jsonData.value,function(index,item) 这种方式时,报错:length为空或不是对象
$.each(jsonData, function(index, item){
alert(item.regionNameZh);
//$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
}
到底是为什么,我很纠结啊!
#5
$.each(jsonData
改为$.each(jsonData.value
改为$.each(jsonData.value
#6
var jsonData = unescape(data.responseText);
这句有问题,data参数已经是json对象了,不需要再声明jsonData,而且生成json对象时eval,不是unescape
$.each( data.value, function(index, item){
alert(item.regionNameZh);
//$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
。
{"success":true,"value":[{"id":"2","regionType":"1","regionNameZh":"北京市","regionParentId":"3525"}] "}
这里多了一个",不知道是不是手误打上去的
这句有问题,data参数已经是json对象了,不需要再声明jsonData,而且生成json对象时eval,不是unescape
$.each( data.value, function(index, item){
alert(item.regionNameZh);
//$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
。
{"success":true,"value":[{"id":"2","regionType":"1","regionNameZh":"北京市","regionParentId":"3525"}] "}
这里多了一个",不知道是不是手误打上去的
#7
前辈,我按照你的方法改了,我的java方法返回值是String,我在return jsonStr之前还out.write(jsonStr)
$each data时也改成data.value,并且在$each之前我alert一下data,弹出的是[object XMLHttpRequest],但是确认后,下拉菜单没有添加成功,报错为:length为空或不是对象 jquery.min.js 32行
#8
success的data参数不可能是XMLHttpRequest对象啊,要么字符串,要么就jquery处理后的json对象
直接浏览器访问../region/region!loadNext.do输出的内容是什么?是修改好后的json格式的字符串数据没有?
直接浏览器访问../region/region!loadNext.do输出的内容是什么?是修改好后的json格式的字符串数据没有?
#9
直接访问,打印的就是{"success":true,"value":[{"id":"2","regionType":"1","regionNameZh":"北京市","regionParentId":"3525"}]}这种格式的字符串
#10
那应该木有问题啊,是执行到success回调了吧,那么success:function(
data),data参数不会是ajax对象的
楼主什么版本的jquery?
楼主什么版本的jquery?
#11
重新梳理一下:
java代码(json格式进行了修改。去掉了succes:true,value:):
struts.xml配置
jsp页面代码:
java代码(json格式进行了修改。去掉了succes:true,value:):
public String loadNext()
{
if (region == null)
{
region = new Region();
region.setRegionType(1);
//region.setParentId(0);
}
regions = regionServiceImpl.getNextList(region);
StringBuffer sb = new StringBuffer();
sb.append("[");
if (regions.size() > 0)
{
int size = regions.size();
int count = 0;
for (Region region : regions)
{
count++;
if (region.getPassed() == 0)
{
sb.append("{");
sb.append("\"id\":\"" + region.getId() + "\",");
sb.append("\"regionType\":\"" + region.getRegionType() + "\",");
sb.append("\"regionNameZh\":\"" + region.getRegionNameZh()
+ "\",");
sb.append("\"regionParentId\":\"" + region.getParentId());
sb.append("\"}");
if (size != count)
{
sb.append(",");
}
}
}
}
sb.append("]");
regionStr = sb.toString();
response.setCharacterEncoding("utf-8");
PrintWriter out = null;
try
{
out = response.getWriter();
out.print(regionStr);
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
out.flush();
out.close();
}
return null;
}
struts.xml配置
<package name="region" extends="struts-default">
<action name="region_*" class="com.beyondsoft.esite.action.region.RegionAction" method="{1}">
</action>
</package>
jsp页面代码:
$.ajax({
type : "POST",
url : "../region/region!loadNext.do",
dataType : "json",
success : function(data) {
$("#habitatRegion2").empty();
$("#habitatRegion2").append("<option value=''>--请选择--</option>");
alert(data) //弹出是 object XMLHttpRequest
$.each(data.value, function(i, item){ //在这里就报错:length为空或不是对象
alert(item.regionNameZh);
$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
}
});
#12
alert(data) //弹出是 object XMLHttpRequest,success回调函数的参数没见过有传递ajax对象
//如果确实是xhr对象,你的jquery应该是被改动过了。
alert(data.responseText) //输出看看什么内容
//如果data为xhr,只能eval动态生成json对象了
data=eval('('+data.responseText+')')
$.each(data, function(i, item){ //在这里就报错:length为空或不是对象
alert(item.regionNameZh);
$("#habitatRegion2").append("<option value='"+item.id+"'>"+item.regionNameZh+"</option>");
});
#13
$.post("请求url",function(data){
$.each(data.Data,function(i,item){
alert(item.id);
});
},"json");
$.each(data.Data,function(i,item){
alert(item.id);
});
},"json");
#14
是不是忘记添加json.js的引用了
#15
换一种呢
$.ajax({
....,
dataType:'text',
success:function(data){
rst_json = eval('('+data+')');
}
})
#16
success:function(datas)的success和:之间多打了空格。。。是这个原因,我被坑了好久
#17
我也被这个空格问题坑了
#18
{"success":true} 这是我的 返回结果,没空格 也是双引号 可还就总进error 不进success里 到现在 坑了一天了 求解答啊
#19
楼主解决了吗?我现在也被这个问题坑了
#20
有可能是访问跨域问题,API后台需要允许这个