当Ajax成功为空或为null时,显示NO数据

本文关键字:显示 NO 数据 Ajax 成功 null | 更新日期: 2023-09-27 18:26:47

我有一个WebMethod,它用一些初始值填充JQuery DataTable。我有一个下拉列表,它调用WebMethod并尝试用不同的值填充它。我的问题是,如果JSON数据为null(或"),那么我会得到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
                 })
             }
         });
     }

当Ajax成功为空或为null时,显示NO数据

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"

您必须在执行任何响应之前执行此操作。编写

您应该将长度设置为这样的

if(msg.d.length !=0) {  // Try this
  //-- build the table
 }