ajax请求成功,但总是进入error状态,控制台报错显示"readyState":4

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信息如下图所示:

console log打印的error信息

看到是parsererror后,开始怀疑请求和后台的数据类型不一致。
最终定位到问题的原因是前后端的数据类型不一致,ajax请求中定义了dataType : "json",而后台返回的是字符串。

2 解决方案

在后台代码中将返回的字符串进行json转换,转换成json格式的字符串再返回即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容