"未捕获的类型错误:无法使用'在'操作员搜索'长度'在“;由Datatable
"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 之外的任何其他版本
我正在使用gem-jquery数据表Rails开发RubyonRails。
我直接从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
)
无需降级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
虽然与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"}
]
- 创建具有可变长度幻灯片显示的幻灯片
- 使用D3.js计算带有字母间距的文本长度
- 操作员”;新的“;根据我想在几个JavaScript文件中使用的类,在JavaScript中使用
- 使用javascript在MVC中查找网格长度时出错
- CryptoJS和密钥/IV长度
- 淘汰赛.JS'启用'长度绑定条件不起作用
- 如何确定对象内部包含对象的JSON的长度
- 如何显示文本长度,即使它超过ng最大长度
- WAMP响应内容长度限制
- 使用javascript比较对象中的对象值和数组长度
- 必须检查长度,并在文本框中允许一些特殊字符
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- Angular2/JavaScript-如何显示localStorage保存的所有变量并获取所有键的总长度
- 如果用户输入的长度小于最小长度,则显示错误消息
- If语句发布或操作员发布
- 如何制作侧边栏以增加其完整长度
- 我可以设置HTML5文件上传的视频长度限制吗
- 未捕获的类型错误:无法使用'在'操作员搜索'长度'在里面
- "未捕获的类型错误:无法使用'在'操作员搜索'长度'在“;由Datatable
- 未捕获的类型错误:无法使用'在'操作员搜索'长度'在里面