我有一个WebMethod,它使用一些初始值填充JQuery DataTable。我有一个下拉列表,它调用WebMethod并尝试使用不同的值填充它。我的问题是,如果JSON数据为空(或''),那么我得到JSON.parse:意外的数据结束。
现在,我可以使用if(msg.d.length !- '' { build the table} )
检查对象的长度但是,如果长度为null(''),那么我永远不会进入构建表,因此无法表明没有数据/没有记录。
如果JSON字符串/对象为null(''),我怎么能确保DataTables仍然没有找到记录等等??
$('#ddBICS').change(function (e) {
var val = $('#dd option:selected').text();
msgDateDetail(val);
});
function msgDateDetail(value) {
$.ajax({
type: "POST",
url: "Default.aspx/MsgDateDetail",
cache: false,
data: JSON.stringify({ searchValue: value }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
var data = JSON.parse(msg.d);
var asInitVals = new Array();
otblMsgDateDetail = $("#tblMsgDateDetail").dataTable({
"sDom": "<'row-fluid'<'span6'T><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
"oTableTools": {
"aButtons": [
"copy",
"print",
{
"sExtends": "collection",
"sButtonText": 'Save <span class="caret" />',
"aButtons": ["csv", "xls", "pdf"]
}
]
},
"aaData": data
})
}
});
}
答案 0 :(得分:2)
msg可能为null或未定义,只需检查变量即可告诉您。此外,由于您使用的是JQuery,因此可以使用isArray JQuery方法检查d是否为数组。
if(msg && msg.d && $.isArray(msg.d) && msg.d.length > 0) {
// build the table
}else{
// data is empty
}
在上述方法中,您将执行以下操作。
function msgDateDetail(value) {
$('#tblMsgDate
$.ajax({
type: "POST",
url: "Default.aspx/MsgDateDetail",
cache: false,
data: JSON.stringify({ searchValue: value }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
var asInitVals = new Array();
var data = (msg && msg.d && $.isArray(msg.d))? msg.d : new Array();
otblMsgDateDetail = $("#tblMsgDateDetail").dataTable({
"sDom": "<'row-fluid'<'span6'T><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
"oTableTools": {
"aButtons": [
"copy",
"print",
{
"sExtends": "collection",
"sButtonText": 'Save <span class="caret" />',
"aButtons": ["csv", "xls", "pdf"]
}
]
},
"aaData": data
})
}
});
}
jquery方法的文档位于jquery.com http://api.jquery.com/jQuery.isArray/
为此,请确保Default.aspx / MsgDateDetail返回内容类型的application / json。要在aspx文件中执行此操作,请执行以下操作:
Response.ContentType = "application/json"
您必须在执行任何Response.Write
之前执行此操作答案 1 :(得分:0)
你应该像这样的长度
if(msg.d.length !=0) { // Try this
//-- build the table
}