“未捕获的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.7
或1.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.4
和DataTables 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()
我这样做了,我的问题得到了解决。
抛弃我忽略的这个小块。 可以帮助那里的人。