大家好!现在我碰到一个问题,在后台传到前台的页面中的json莫名多了一些html元素,导致json无法解析,出现错误,我想问问这种情况有同僚遇到过吗?是怎么解决的吗,谢谢分享,有大神也希望帮忙看看!,这是后台返回的json串,最上面是我需要的json,下面的是html页面元素,
大家帮下忙,小弟感激不尽
我知道是从后台跑出来,,如果是struts的话,,可以这样
<result name="success" type="json">
<param name="root">result</param>
</result>
result为action中的成员变量,有get和set方法
应该是你后台的问题吧
public String toDataTableJson(Page page,
ObjectToMapCallback callback, String... args) {
String result = "";
try {
ReturnObject ro = toDataTableJsonObject(page.getResult(),
callback, args);
ro.setRecordsTotal(Integer.parseInt(page.getTotalCount() + ""));
ro.setRecordsFiltered(Integer.parseInt(page.getTotalCount() + ""));
//renderJSON(JSON.toJSONString(ro,SerializerFeature.WriteMapNullValue)); 这句注释掉了,,
} catch (Exception e) {
logger.error(e.getMessage());
result = e.getMessage();
}
return result;
}
这是注释掉上面哪句 renderJson之后页面的情况,还是能显示html页面元素
f12,,看下请求的详细信息
这个是后台返回的一切正常,但是到页面就多了一些html参数,求大婶,这个问题卡了我三天了
你后台跳转的时候,是会跳到一个页面吗
这是处理完整之后跳的页面 跟之前是同一个页面
我好像记得struts返回json要在result里面写上type="json"吧
那你怎么返回数据的呢?
现在的结果是这样啦
大神请看,,现在结果是这样的
想A页面Ajax请求,后台处理完,数据还是返回A页面,按两个步骤修改:
第一步:后台不能做页面跳转, action中处理请求的方法声明为void, 不直接返回数据。
第二步: 处理请求的方法中,把要返回前端的数据 写入响应对象里,就是HttpServletResponse
// HttpServletResponse
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 响应内容为Json类型
response.setContentType("application/json; charset=UTF-8");
response.getWriter().write("用来返回前端的 json字符串");
第三点: 你的Ajax请求少了一个参数, dataType:"json"
希望能帮到你!
ajax的返回值类型要设置成json!
我也遇到过类似问题,造成这个问题的原因是你在用ajax发送请求的时候在访问过action之后会自动回到发送请求的位置,若你在请求到的action里加了页面跳转的逻辑,ajax就会自动将跳转到的那个页面代码当做返回的数据返回回来,因此可以加上sucess函数,在sucess函数中实现页面跳转即可,
代码示例如下:
$.ajax({
url:'/busasst/map/confirm',
data:{datastring:self.datastring},
//dataType:'string',
type:'post',
async : false, //默认为true 异步
success:function(data){
//self.data=data;
//self.doData();
window.location.href="/busasst/user/linestation";
console.log("发送成功")
},error:function(){
console.log("获取错误");
return "error";
}
});
你要返回的 data