layui.js:1 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in { "total": 6, "status": 200, "code": 0, "count": 6, "data": [ { "role_id": 1, "role_name": "系统管理员", "role_menu": "", "role_power": null }, { "role_id": 2, "role_name": "信息员", "role_menu": null, "role_power": null }, { "role_id": 3, "role_name": "教务员", "role_menu": null, "role_power": null }, { "role_id": 4, "role_name": "教师", "role_menu": null, "role_power": null }, { "role_id": 5, "role_name": "年级主任", "role_menu": null, "role_power": null }, { "role_id": 6, "role_name": "教导主任", "role_menu": null, "role_power": null } ], "errno": 0, "message": "ok", "msg": "success" }

 at n (layui.js:1)
     at Function.each (layui.js:1)
     at Object.success (user.html:350)
     at l (layui.js:2)
     at Object.fireWith [as resolveWith] (layui.js:2)
     at r (layui.js:3)
     at XMLHttpRequest.n (layui.js:3)

出错对应的位置为

 $.ajax({
 url: 'http://192.168.23.254:801/ctl_public.fsp?proc=getuserrole',
                                 success: function (data) {
                                     //console.log(data);
                                         $.each(data,function (index,item) {
                                         console.log(index,item);

原因就是data不是对象是JSON字符串,因此,需要转换为JavaScript对象——JSON.parse(data)

$.each(JSON.parse(data),function (index,item) {
                                        console.log(index,item);
                                        
                                        if(contentdata.user_roleid == item.role_id){
                                            layero.find('iframe').contents().find('[name=userrole]').append($("<option>").attr("value",item.role_id).attr("selected","selected").text(item.role_name));
                                        }else{
                                            layero.find('iframe').contents().find('[name=userrole]').append($("<option>").attr("value",item.role_id).text(item.role_name));
                                        }
                                    });

但此时依然无法通过item取得想要的值,原因就是该段JSON数据有两层,转换成对象后,对象内还有一个data对象,因此需要指到内部data对象,才能获取我们想的值,因此,需要改成如下代码

$.each(JSON.parse(data).data,function (index,item) {
                                        
                                        console.log(index,item);
                                        
                                        if(contentdata.user_roleid == item.role_id){
                                            layero.find('iframe').contents().find('[name=userrole]').append($("<option>").attr("value",item.role_id).attr("selected","selected").text(item.role_name));
                                        }else{
                                            layero.find('iframe').contents().find('[name=userrole]').append($("<option>").attr("value",item.role_id).text(item.role_name));
                                        }
                                    });

上面是本人在写某个项目过程中出现的问题,最后成功解决,记下来,也供他人参考。

项目问题:https://www.netniu.cn/index.php/archives/60/

发表评论