“未捕获的TypeError:无法使用’in’运算符来搜索”由Datatables插件和jQuery 1.11.3触发的’length’

我正在使用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(正如詹姆斯在评论中指出的那样)存在这个问题。

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

我正在使用gem jquery-datatables-rails处理Ruby on Rails。

我直接从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

虽然与DataTables无关,但我遇到了“无法在运算符中使用来搜索长度”错误。 这是导致错误的主要Google结果,所以我想将问题作为回复发布,以防其他人帮助。

我有:

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

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

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

我几乎很尴尬发布这个;)

干杯

无需降级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

我通过添加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() 

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

抛弃我忽略的这个小块。 可以帮助那里的人。