php 返回 json 为空 undefined 或者 失败的问题

在用 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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值