-1

JQuery DataTable にいくつかの初期値を設定する WebMethod があります。WebMethod を呼び出して別の値を設定しようとするドロップダウン リストがあります。私の問題は、JSONデータがnull(または '')の場合、JSON.parse:予期しないデータの終わりです。

これで、次を使用してオブジェクトの長さを確認できます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 に答える