"Uncaught TypeError: Cannot use 'in' operator to search for 'length' in " triggered by Datatables plugin and jQuery 1.11.3
"Uncaught TypeError: Cannot use 'in' operator to search for 'length' in " triggered by Datatables plugin and jQuery 1.11.3
我正在使用 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 以外的任何其他版本
将 DataTables 升级到 DataTables 1.10.7
或 1.10.8-dev
对我不起作用(使用 jQuery 1.11.3
)。
降级到 jQuery 1.11.2
确实有效(使用 DataTables 10.0.0
)
我正在 Rails 上 Ruby 使用 gem jquery-datatables-rails.
我直接从 GitHub 的最后一次提交更新了 gem:
gem 'jquery-datatables-rails', github: "rweng/jquery-datatables-rails", branch: "master"
这对我有用,我想他们很快就会发布新版本的 gem 和这个提交。
无需降级jQuery。
我通过使用 aoColumns
as
解决了同样的错误
$('#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
虽然与 DataTables 无关,但我遇到了这个 "cannot use in operator to search for length" 错误。这是错误的主要 Google 结果,所以只是想 post 我的问题作为回应,以防它对其他人有帮助。
我有:
ApplicationIDs: $.map(".application-checkbox:checked", function (checkedApplicationCheckbox, i) {
我忘记用 $
包装我的选择器,所以修复是为了确保我将实际的 jQuery 元素作为第一个参数传递给 map
而不是只是一个字符串...
ApplicationIDs: $.map($(".application-checkbox:checked"), function (checkedApplicationCheckbox, i) {
我对这个 post 几乎感到尴尬 ;)
干杯
我通过像这样添加 json 数据类型解决了类似的问题:
$.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();
否则你可能会遇到可怕的错误
Uncaught TypeError: Cannot use 'in' operator to search for 'length' in
或者这个
Uncaught TypeError: Cannot read property 'length' of undefined
在我的例子中,此错误的根本原因是在 ajax 数据 table 调用中传递的无效列详细信息。
$("#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"}
]
我正在使用 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 以外的任何其他版本
将 DataTables 升级到 DataTables 1.10.7
或 1.10.8-dev
对我不起作用(使用 jQuery 1.11.3
)。
降级到 jQuery 1.11.2
确实有效(使用 DataTables 10.0.0
)
我正在 Rails 上 Ruby 使用 gem jquery-datatables-rails.
我直接从 GitHub 的最后一次提交更新了 gem:
gem 'jquery-datatables-rails', github: "rweng/jquery-datatables-rails", branch: "master"
这对我有用,我想他们很快就会发布新版本的 gem 和这个提交。
无需降级jQuery。
我通过使用 aoColumns
as
$('#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
虽然与 DataTables 无关,但我遇到了这个 "cannot use in operator to search for length" 错误。这是错误的主要 Google 结果,所以只是想 post 我的问题作为回应,以防它对其他人有帮助。
我有:
ApplicationIDs: $.map(".application-checkbox:checked", function (checkedApplicationCheckbox, i) {
我忘记用 $
包装我的选择器,所以修复是为了确保我将实际的 jQuery 元素作为第一个参数传递给 map
而不是只是一个字符串...
ApplicationIDs: $.map($(".application-checkbox:checked"), function (checkedApplicationCheckbox, i) {
我对这个 post 几乎感到尴尬 ;)
干杯
我通过像这样添加 json 数据类型解决了类似的问题:
$.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();
否则你可能会遇到可怕的错误
Uncaught TypeError: Cannot use 'in' operator to search for 'length' in
或者这个
Uncaught TypeError: Cannot read property 'length' of undefined
在我的例子中,此错误的根本原因是在 ajax 数据 table 调用中传递的无效列详细信息。
$("#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"}
]