php 返回 json 为空 undefined 或者 失败的问题
2012-08-16 09:39
260 查看
在用 php 对 Ajax 进行响应并返回 json 的时候,遇到一个很棘手的问题,就是 responseJSON 的值为 undefined, 如图:
我自然就想到是不是发送的不是 application/json 类型的数据呢?于是查看了一下 response 的头部:
也没有问题啊!?这到底是怎么回事?
事件的解决过程是这样的,经过漫长的查找之后,终于发现是一个函数调用的时候缺少参数,结果php就发送了一些错误信息到页面上,紧接着又发送json数据,于是两种数据混合在一起,evalJS无法进行解析,就产生了 undefined 的对象了。又由于我关掉了一些警告的显示,所以页面也不会显示其他的警告信息等等。
事实上,如果观察一下responseText 的内容,就会发现,其实在文本的末尾就是我要返回的 json 数据了,前面的</table></font>等都是错误信息的一部分。
依此类推的话,实际上php发送json失败的原因不仅仅是函数调用时缺少参数了,只要是在发送之前产生了任何错误信息,都可能引起发送失败。而要想知道到底是哪些原因引起了错误,就直接把responseText 的内容复制出来,再慢慢查找一下就行了。
实事上,除了在返回JSON数据前后不能出现任何错误和警告之外,也不能在返回JSON数据前后再返回其他无法被解析为JSON的数据。比如:
$this->sendJson(array("a"=>"b"));
echo "kkk";
则此时responseText的数据为:
"{"a":"b"}kkk" 是一个无法被解析为JSON的数据,所以此时responseJSON 为undefined。
我自然就想到是不是发送的不是 application/json 类型的数据呢?于是查看了一下 response 的头部:
也没有问题啊!?这到底是怎么回事?
事件的解决过程是这样的,经过漫长的查找之后,终于发现是一个函数调用的时候缺少参数,结果php就发送了一些错误信息到页面上,紧接着又发送json数据,于是两种数据混合在一起,evalJS无法进行解析,就产生了 undefined 的对象了。又由于我关掉了一些警告的显示,所以页面也不会显示其他的警告信息等等。
事实上,如果观察一下responseText 的内容,就会发现,其实在文本的末尾就是我要返回的 json 数据了,前面的</table></font>等都是错误信息的一部分。
依此类推的话,实际上php发送json失败的原因不仅仅是函数调用时缺少参数了,只要是在发送之前产生了任何错误信息,都可能引起发送失败。而要想知道到底是哪些原因引起了错误,就直接把responseText 的内容复制出来,再慢慢查找一下就行了。
实事上,除了在返回JSON数据前后不能出现任何错误和警告之外,也不能在返回JSON数据前后再返回其他无法被解析为JSON的数据。比如:
$this->sendJson(array("a"=>"b"));
echo "kkk";
则此时responseText的数据为:
"{"a":"b"}kkk" 是一个无法被解析为JSON的数据,所以此时responseJSON 为undefined。
相关文章推荐
- 解决PHP服务端返回json字符串有特殊字符的问题
- PHP中file_get_contents函数获取带BOM的utf-8,然后json_decode() 返回null的问题
- PHP中使用了mcrypt_decrypt函数处理Json串后导致Json_decode返回null问题
- php返回json数据中文显示的问题
- php jquery jsonp 跨域访问,jsoncallback无返回?!!!,无解了,为什么没返回,没返回!原来是是这个jsoncallback的问题
- php返回json数据中文显示的问题
- 解决PHP下json_decode返回NULL的问题。
- discuz学习记录:删除记录成功或者失败则返回json格式success=true或false
- ajax根据ID查询数据库并返回Json格式数据返回js,使用append显示到页面。判断json值为[]或者[[]]的问题。
- PHP中file_get_contents函数获取带BOM的utf-8,然后json_decode() 返回null的问题
- 关于处理PHP json_encode返回的json数据一些小问题
- ueditor上传图片时目录创建失败的问题解决方法,不用那么麻烦,其实修改php/config.json这个配置文件里面的路径就行!!
- 也说php从mysql数据库通过服务器端json返回数据出现乱码问题
- PHP json_decode返回null解析失败原因
- php json_encode总是返回unicode字符 "\u..."问题 解决
- PHP json_decode返回null解析失败原因
- php返回json数据中文显示的问题
- php关于jquery ajax json不返回数据的问题
- PHP中file_get_contents函数获取带BOM的utf-8,然后json_decode() 返回null的问题
- jquery的ajax处理php返回数组,及json_encode中文问题