-1

我有一个 WebMethod,它使用一些初始值填充一个 JQuery DataTable。我有一个下拉列表,它调用 WebMethod 并尝试用不同的值填充它。我的问题是,如果 JSON 数据为空(或 ''),那么我会得到 JSON.parse: unexpected end of data。

现在,我可以使用检查对象的长度。if(msg.d.length !- '' { build the table} )但是,如果长度为空(''),那么我永远不会进入构建表,因此不能显示没有数据/没有记录。

如何确保如果 JSON 字符串/对象为 null (''),DataTables 仍然显示 No Records found 等...?

 $('#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
                 })
             }
         });
     }
4

2 回答 2

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 之前执行此操作

于 2013-08-08T09:57:31.820 回答
0

你应该这样的长度

if(msg.d.length !=0) {  // Try this
  //-- build the table
 }
于 2013-08-08T09:57:09.593 回答