使用 ajax post请求道服务器,服务器返回了数据,但是 ajax 用json格式解析时却报错:
SyntaxError: JSON.parse: unexpected character at line 1 column 39 of the JSON data
响应数据:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 14 Mar 2016 08:30:12 GMT
3f
{"errorMsg":"服务器异常,请稍后再试","errorNo":9999}
0
将 ajax 的 dataType 由 json 改为 text, 然后在 success 函数打印出收到的数据,内容如下:
- "errorMsg":"此视频已经存在",
- "errorNo":102
html源码是:
<div id="json"><span class="collapser"></span>{<ul class="obj collapsible"><li><span class="prop" title="<root>.errorMsg"><span class="q">"</span>errorMsg<span class="q">"</span></span>: <span class="string">"此视频已经存在"</span>,</li><li><span class="prop" title="<root>.errorNo"><span class="q">"</span>errorNo<span class="q">"</span></span>: <span class="num">102</span></li></ul>}</div>
原来服务器输出数据时候,将json数据添加了 html 标签,导致 js 解析出错。
从服务器端查找原因,另外网上有人讲了这个问题:
http://blog.youkuaiyun.com/cilwfvip/article/details/8538373
http://www.tuicool.com/articles/yUBv6fn
ajaxfileupload调用的时候dataType不用设置,使用默认text/html.返回的数据作处理:
var str = $(data).text();//获取返回的字符串
var jobj = $.parseJSON(str);//把字符串转化为json对象
问题仍然存在,发现 str 的 102 数字和 冒号之间有一个奇怪的看不到的符号,导致 parseJSON依然报错,此现象仅仅在FireFox上存在,在IE和Edge浏览器上没有。
没办法,只好再过滤一遍str,把无关字符删除,才可以了。
var str = $("#addResp").text().replace(/:\s*[^\d|^\"]*/g, ':');
var jobj = $.parseJSON(str);