"未捕获的类型错误:无法使用'在'操作员搜索'长度'在“;由Datatable

"Uncaught TypeError: Cannot use 'in' operator to search for 'length' in " triggered by Datatables plugin and jQuery 1.11.3

本文关键字:操作员 长度 Datatable 搜索 quot 错误 类型      更新时间:2023-09-26

我正在使用jQuery Datatables插件来启用表的分页、排序和搜索。元素显示但不起作用,分页只是偶尔显示。在Chrome控制台中,我得到了错误:

Uncaught TypeError: Cannot use 'in' operator to search for 'length' in 

这是演示页面。

我在这个插件的旁边使用Bootstrap。

该错误是由于jQuery 1.11.3版本中的方法isArraylike造成的。(仅)。该方法看起来像

function isArraylike( obj ) {
    // Support: iOS 8.2 (not reproducible in simulator)
    // `in` check used to prevent JIT error (gh-2145)
    // hasOwn isn't used here due to false negatives
    // regarding Nodelist length in IE
    var length = "length" in obj && obj.length, // <------ THIS IS THE CULPRIT
        type = jQuery.type( obj );
    .......
}

那个版本的jQuery在对象中使用"length"来获取长度。(我对此一无所知)。

但我知道jquery的其他版本都没有这个问题

1.11.3和2.1.4版本(正如James在评论中指出的)存在此问题。

因此,解决方案是升级到下一个版本,或者至少使用1.11.3或2.1.4 之外的任何其他版本

我正在使用gem-jquery数据表Rails开发RubyonRails。

我直接从GitHub:上的最后一次提交中更新gem

gem 'jquery-datatables-rails', github: "rweng/jquery-datatables-rails", branch: "master"

这对我来说很有效,我想他们很快就会发布一个新版本的gem。

将DataTables升级到DataTables 1.10.71.10.8-dev对我不起作用(使用jQuery 1.11.3)。

降级到jQuery 1.11.2确实有效(使用DataTables 10.0.0

无需降级jQuery。我使用aoColumns作为解决了同样的错误

$('#id').DataTable( {
    data: [["A", "B"], ["a", "b"]],
    'aoColumns': [ 
        { sWidth: "50%", bSearchable: false, bSortable: false }, 
        { sWidth: "50%", bSearchable: false, bSortable: false }
        ],
    } );

我正在使用jQuery 2.1.4DataTables 1.10.9

虽然与DataTables无关,但我遇到了"无法在运算符中搜索长度"的错误。这是谷歌错误的主要结果,所以我只想发布我的问题作为回应,以防它对其他人有帮助。

我有:

ApplicationIDs: $.map(".application-checkbox:checked", function (checkedApplicationCheckbox, i) {

我忘了用$包装我的选择器,所以修复方法是确保我将实际的jQuery元素作为第一个参数传递给map,而不仅仅是一个字符串。。。

ApplicationIDs: $.map($(".application-checkbox:checked"), function (checkedApplicationCheckbox, i) {

我几乎不好意思发布这个;)

干杯

我通过添加json dataType修复了类似的问题,如下所示:

$.ajax({
    type: "POST",
    url: "someUrl",
    dataType: "json",
    data: {
        varname1 : "varvalue1",
        varname2 : "varvalue2"
    },
    success: function (data) {
        $.each(data, function (varname, varvalue){
            ...
        });  
    }
});

在我的控制器中,我必须在任何字符串周围使用双引号(注意:它们必须在java中转义):

@RequestMapping(value = "/someUrl", method=RequestMethod.POST)
@ResponseBody
public String getJsonData(@RequestBody String parameters) {
    // parameters = varname1=varvalue1&varname2=varvalue2
    String exampleData = "{'"somename1'":'"somevalue1'",'"somename2'":'"somevalue2'"}";
    return exampleData;
}

我遇到了完全相同的问题,但jQuery版本并不是我的罪魁祸首。在我的情况下,我错误地序列化了表单。最终导致此错误的代码是:

$('#form_name').serialize()

而我本该用的。

$('#form_name').serializeArray()

我这样做了,我的问题得到了解决。

只是扔掉了我忽略的这一小块。可以帮助外面的人。

使用DataTables并使用AJAX调用PHP脚本,请注意,您只需要在末尾回显您的数组。不需要先用JSON_encode将其编码为JSON对象。

所以

header('Content-type:application/json;charset=utf-8'); 
echo $myArray // This will do. Do not use echo json_encode($myArray);
exit();

否则,你可能会出现可怕的错误

未捕获的类型错误:无法使用"in"运算符在中搜索"length"

或者这个

未捕获的类型错误:无法读取未定义的属性"length"

在我的案例中,此错误的根本原因是ajax数据表调用中传递的列详细信息无效。

$("#example1").DataTable({            
        searching: false,            
        paging: false,
        serverSide: true,        
        ajax: {
            url:"data-url",
            type:"post",                
            data:{
                key:"key_id"
            }
        },
        columns: [
           {"data":"column_1","name":"column_name_1"},                                      
           {"data":"EScore","name":"EScore"}
        ]
});

早些时候,我面对";未捕获的类型错误:当我传递时,无法使用"in"运算符搜索"length"

columns: ["column_1","column_2"]

我通过正确的结构来解决这个问题

columns: [ 
    {"data":"column_1","name":"column_name_1"},                                      
    {"data":"EScore","name":"EScore"}
 ]