工作中遇到的问题——jQuery报错,Uncaught TypeError: Cannot read property ‘toLowerCase‘ of undefined

这个问题有很多朋友都有遇到过,我这个问题出现的原因有点奇葩,在这里记录一下。
我的功能是输入【产品】之后,后台能够查询出【标签】,加载到标签下拉框。用户可以从结果中选择或者自己输入。在这里插入图片描述

问题

一个很奇怪的现象,就是输入产品,点击标签下拉框,要输入的时候,有时会报错Uncaught TypeError: Cannot read property ‘toLowerCase‘ of undefined。有时不会报。
本地环境和测试环境没有报错,正式环境报错了。为什么呢?

排查

  1. 我们要知道出问题的【产品】是哪些,为什么有的会有问题,有些又没有
  2. 在出错的时候,浏览器当前页面,当我通过产品查到标签,加载到下拉框的时候,按F12,看network返回的是什么?没有错的时候又返回的是什么?
    接下来,看到两种情况
    1)报错的
    data:[
    tags:[{checked:false}[
    ]
    2)不报错的
    data:[
    tags:[]
    ]
  3. 所以就是后端返回的结果有问题!我把有问题的产品条件,拿去数据库查询。发现看起来好像没问题。
    sql语句:

select distinct tags from product where id in
(:id)

查询结果

tags

细问一下同事,这个产品的输入值是怎么来的,他说product表里有。那有的话为什么查出来是空?空的不应该返回tags:[]吗?哪里来的checked:false?我们没有这个字段啊。
select * from product where id=‘123’
发现问题了!它的tags是空值……
本地环境和测试环境不报错,是因为它们的数据库这个字段都有值,数据不一样,情况也就不一样。
所以查询出来有没有记录,和字段有没有值还是要区分一下的,毕竟我们还是distinct一个字段。

解决与总结

问题点找到了之后,就要解决。

  1. 解决办法1:java代码for循环判断查出来的结果是否是个空值,需要重新打包上版
  2. 解决办法2:修改sql,不查询空的tags
    select distinct tags from product
    where id in (:id)
    and tags is not null
    【总结】:
    一般只查询一个字段,或者有distinct的,记得要加上不为空的条件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焦虑的说说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值