$.ajax返回json数据格式不执行success回调函数

就是在最近的测试项目中发现了一个很奇怪的问题, 是这样的我用node.js搭建了一个本地服务器,
然后用$.ajax加载本地json, datatype返回的格式为text没问题, datatype返回的格式为json即报错 调试看status=200,readystate=4,还是直接跳入error回调
图片说明
这个是报错说明。
附上源码和json
图片说明
图片说明
图为最简单的json

3个回答

aaa.json是第一个截图的内容?那应该没有问题,可能是你的json文件utf-8编码,并且是有bom头导致JSON.parse出错了,json另存为没有bom头的utf-8

Rachel_tech
三三_两两 回复showbo: 哦~~现在是真的理解了, 谢大神。 手动敬礼
接近 3 年之前 回复
showbo
支付宝加好友偷能量挖 回复Rachel_tech: datType为json,jquery自动将返回值转为json对象(如果返回怪异模式的json字符串,因为1.4+jq用的JSON.parse转的,即使服务器不报错也会执行error回调,因为JSON.parse怪异json字符串会报错,你可以看下这个:http://www.w3dev.cn/article/20100722/jquery-1-4-datatype-is-json-issue.aspx,所以data就是json了,直接alert对象当然是输出[object Object] 了。你直接使用就行了啊。alert(data.name)。JSON.parse(data)和eval都不需要了,data已经是JSON对象。如果dataType是text,html这种,data是字符串,才需要JSON.parse或者eval转为对象
接近 3 年之前 回复
Rachel_tech
三三_两两 回复Rachel_tech: 我好像已经成功了, 谢谢你, 太感谢了。
接近 3 年之前 回复
Rachel_tech
三三_两两 回复showbo: 但现在就是返回了[object Object]要怎么办呢 希望能在知道一下。 非常感谢
接近 3 年之前 回复
showbo
支付宝加好友偷能量挖 回复Rachel_tech: dataType指定为json就不需要再JSON.parse了,直接就是对象了。你再parse就是JSON.parse('[object Object] ')当然出错了,会调用对象的toString返回的就是[object Object]
接近 3 年之前 回复
Rachel_tech
三三_两两 回复Rachel_tech: 然后解析的时候就报错了
接近 3 年之前 回复
Rachel_tech
三三_两两 回复Rachel_tech: 直接输出data的话出来的是[object Object]
接近 3 年之前 回复
Rachel_tech
三三_两两 回复showbo: 不是我的是进入到success里了, 没有进入error里。
接近 3 年之前 回复
showbo
支付宝加好友偷能量挖 回复Rachel_tech: 那JSON.parse不会出错了的,指定dataType为json也不会进入error,你的还是进入error?
接近 3 年之前 回复
Rachel_tech
三三_两两 dataType改为text输出长度确实是为14
接近 3 年之前 回复
showbo
支付宝加好友偷能量挖 回复Rachel_tech:同时去掉空白内容试试{"name":"aaa"},直接这样,然后dataType改为text后输出下data.length看看,如果不是14那么肯定是混入了不可见空白字符在里面了
接近 3 年之前 回复
showbo
支付宝加好友偷能量挖 回复Rachel_tech: 看截图是没有问题。。但是有些看不到的字符串也不一定,所以最好记事本过滤下
接近 3 年之前 回复
Rachel_tech
三三_两两 回复showbo: json就是上面截图的那个"name":"aaa",应该也没有什么字符串可以去除了吧
接近 3 年之前 回复
showbo
支付宝加好友偷能量挖 回复Rachel_tech: 那应该还有其他字符导致解析出错了。记事本打开将json另存为去掉其他字符串试试。JSON.parse报错就是你返回的内容有问题导致的
接近 3 年之前 回复
Rachel_tech
三三_两两 用JSON.parse(data)这个解析的话报这个错误 (Uncaught SyntaxError: Unexpected token o in JSON at position 1)
接近 3 年之前 回复
Rachel_tech
三三_两两 发现有进入到success回调函数中。 是解析出现问题
接近 3 年之前 回复
Rachel_tech
三三_两两 可以排除是bom头的问题了,已经去除了。
接近 3 年之前 回复
Rachel_tech
三三_两两 已经另存为utf-8的格式了。但是隐藏的bom头我不知道是否有存在, 我下载个editplus看看去除之后是什么情况
接近 3 年之前 回复

你把你注释掉的地方放开试试

qq_34730277
南宫文凯 我感觉是救不了他了,你加油
接近 3 年之前 回复
Rachel_tech
三三_两两 回复75闪光雷: 好的, 谢谢, 我试试
接近 3 年之前 回复
qq_34309305
75闪光雷 这个是小问题了,你单步调试一下就能解决
接近 3 年之前 回复
Rachel_tech
三三_两两 发现有进入到success回调函数中。 是解析出现问题
接近 3 年之前 回复
Rachel_tech
三三_两两 试过了, 还是一样的报错,都没进success这个回调,直接跳到error里了
接近 3 年之前 回复

调试方法,现在你的success:里随便alert();一下看看是否进入了,如果没有。就查看java代码
readystate=4, 一般指接收到响应数据的状态。
你的返回值是实体类还是包装类,看看后台有没有问题

Rachel_tech
三三_两两 回复Rachel_tech: 我好像已经成功了, 谢谢你, 太感谢了。
接近 3 年之前 回复
Rachel_tech
三三_两两 回复邓少峰: 谢谢你, 我努力一下
接近 3 年之前 回复
qq_34730277
南宫文凯 报错信息呢?
接近 3 年之前 回复
qq_34730277
南宫文凯 回复Rachel_tech: 你这真是,data.里面的元素,看看是否和你传过来的数据一致,你知道data里的是什么吗?
接近 3 年之前 回复
Rachel_tech
三三_两两 回复邓少峰: alert(data.val()) 会报错不是一个函数
接近 3 年之前 回复
qq_34730277
南宫文凯 回复Rachel_tech: alert(data.val());/alert(data.text);看看是不是你要拿到的数据,判断错误异常的原因
接近 3 年之前 回复
qq_34730277
南宫文凯 回复Rachel_tech: 报错信息
接近 3 年之前 回复
Rachel_tech
三三_两两 回复邓少峰: alert(data)出来的是[object Object],然后在往下解析他就报错了。
接近 3 年之前 回复
qq_34730277
南宫文凯 回复Rachel_tech: 如果你alert (data);有数据就没问题啊!但如果没数据、或者你请求页面返回的不是data就错了,所以如果alert(data)没数据就得看你调用的本地json对象地址是不是对的
接近 3 年之前 回复
Rachel_tech
三三_两两 发现有进入到success回调函数中。 是解析出现问题
接近 3 年之前 回复
Rachel_tech
三三_两两 没有用到后台, 只是自己在本地测试调试, 调用的是本地的json。
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐