1 问题描述
明明是后台开发,却因为接手了一个前后端完全不分离的jsp+servlet+JDBC的项目而被迫走上了写前端代码的不归路……遇到的问题也是极多。
ajax代码:
$.ajax({
url: globalServer + "/startlogjupyter",
type:'get',
dataType : "json",
data:{
logname:logname,
taskname:taskname
},
success:function (data) {
var noteForURL = document.getElementById("noteforURL");
noteforURL.innerText = data;
noteforURL.style.display = "block";
//打开窗口
window.open(data, "_blank");
},
error:function (err) {
if(window.console){
console.log(err);
}
}
});
java代码执行完主要逻辑返回一个字符串给前端:
//此处省略一大堆代码
……
String url = "http://www.baidu.com";
response.setCharacterEncoding("utf-8");
response.setContentType("application/json");
PrintWriter out = response.getWriter();
out.write(url);
out.flush();
out.close();
结果,F12查看network选项中该接口请求成功,state为200,response为"http://www.baidu.com"。但是此时前端却无法显示和跳转,console log打印的error信息如下图所示:
看到是parsererror后,开始怀疑请求和后台的数据类型不一致。
最终定位到问题的原因是前后端的数据类型不一致,ajax请求中定义了dataType : "json",而后台返回的是字符串。
2 解决方案
在后台代码中将返回的字符串进行json转换,转换成json格式的字符串再返回即可。