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

时间:2013-08-08 09:54:54

标签: c# jquery

我有一个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
                 })
             }
         });
     }

2 个答案:

答案 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
 }