Javascript TypeError-d未定义
因此,我使用jQuery子行来显示父行中的一些数据。最初通过Ajax显示之后,我执行另一个Ajax请求并更改datatable中的数据。现在,如果我尝试展开它,它会显示行。但是,如果我再次尝试更改datatable中的数据,它会说d没有定义 这是我最初在datatable中加载数据时的代码Javascript TypeError-d未定义,javascript,jquery,Javascript,Jquery,因此,我使用jQuery子行来显示父行中的一些数据。最初通过Ajax显示之后,我执行另一个Ajax请求并更改datatable中的数据。现在,如果我尝试展开它,它会显示行。但是,如果我再次尝试更改datatable中的数据,它会说d没有定义 这是我最初在datatable中加载数据时的代码 $.ajax({ url: "GetGridDetails?decodeID="+decoderFileSelected, type: "GET", data
$.ajax({
url: "GetGridDetails?decodeID="+decoderFileSelected,
type: "GET",
dataType: 'json',
success: function (myData) {
if(myData != null){
console.log("my data is:"+myData);
var table = $('#dashNumTable').DataTable({
destroy: true,
data: myData ,
"columns": [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ "data": "S" },
{ "data": "W" },
{ "data": "SA" },
{ "data": "DDS" },
{ "data": "AAS" },
{ "data": "ABS" },
{ "data": "BIN" },
{ "data": "ET" }
],
"order": [[1, 'asc']]
});
// Add event listener for opening and closing details
$('#dashNumTable tbody').on('click', 'td.details-control', function () {
//alert("clicked plus!");
var tr = $(this).closest('tr');
var row = table.row(tr);
//var row = $('#dashNumTable').DataTable().row(tr);
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child(format(row.data())).show();
tr.addClass('shown');
}
});
}//if code ends..
else{
alert("There are no base numbers for the selected decoder ring file...");
}
} //end of success function...
});
这将生成一个表,其中加号按钮用于展开,减号按钮用于收缩
激发ajax事件时刷新和添加新数据的代码
$(document).on("click", "#showHGAPartBtn", function(){
// clear the eixisting table contents
//alert("show button clicked!");
var decoderFileSelected = $("#decoderFile").val();
//$('#dashNumTable').empty();
// var clearTable = $('#dashNumTable').DataTable();
// clearTable.clear().draw();
//clearTable.rows().remove();
$('#dashNumTable').DataTable().ajax.reload();
//get the fresh data..
$.ajax({
url: "GetGridDetails?decodeID="+decoderFileSelected,
type: "GET",
dataType: 'json',
success: function (data) {
//if(myData != null){
//console.log("my data is:"+myData);
var table = $('#dashNumTable').DataTable({
// destroy: true,
cache: false,
processing: true,
data: data ,
"columns": [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ "data": "S" },
{ "data": "W" },
{ "data": "SA" },
{ "data": "DDS" },
{ "data": "AAS" },
{ "data": "ABS" },
{ "data": "BIN" },
{ "data": "ET" }
],
"order": [[1, 'asc']]
});
// Add event listener for opening and closing details
// $('#dashNumTable').on('click', 'tbody td.details-control', function () {
$('#dashNumTable').delegate('tbody td.details-control', 'click', function () {
//alert("clicked plus!");
var tr = $(this).closest('tr');
//table.ajax.reload();
var row = table.row(tr);
// alert("Row is :"+row);
//var row = $('#dashNumTable').DataTable().row(tr);
console.log(tr);
console.log(row);
console.log(row.child.isShown());
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child(format(row.data())).show();
tr.addClass('shown');
}
});
// }//if code ends..
// else{
// alert("There are no base numbers for the selected decoder ring file...");
//}
},
//end of success function...
error: function(response){
console.log(response);
}
});// end of AJAX call
下面是format函数,它第二次返回错误
函数格式(d){
//警惕(d.stringify);
//警报(JSON.stringify(d));
var rowSelectedBaseNumbers=d.HGA_BASE_NUMBERS;
//`d`是该行的原始数据对象
//警报(RowselectedBaseNumber);
var selectedBaseNumbersDropdown=$(“#selBaseNumbers”).val();
var initial=“仪表盘编号头”;
var finalReturn=“”;
var endHeaders=“”;
var=”;
//现在迭代基数
对于(变量i=0;i
返回的错误是
typeerror-d未定义
在格式化函数中设置故障保护方案,以便在没有可用数据时,代码将不会执行
function format (d) {
if (d) { return null; }
...
}
你确定密码正确吗
行数据()
实际返回一个值?=>试着弄清楚
还有,d是什么?尽量使代码易于阅读。我们开发者是作家。不是针对计算机,而是针对我们的同事,他们有时需要阅读我们的代码来理解我们试图完成的任务。console.log(row.data())显示了什么?在您的表中的某个地方,
row.data()
返回未定义的,因此没有给出函数fortmat()
要使用的d
。@mplungjan正在尝试查找它。似乎控件甚至没有进入if/else块。@MáttheusSpoo知道为什么会发生吗?或者其他更好的方法来删除表中显示的所有内容,并使用ajax显示新行?@mplungjan这是我第一次点击ajax调用时的输出[object object],第二次点击undefined
。确保代码的故障安全性总是很好的,但这只是本例中实际潜在问题的一个解决方案。@LaurensMäkel,我建议首先检查row.data()中的值是否存在。
function format (d) {
if (d) { return null; }
...
}