[SalesForce] Jquery datatable error pops up when table is loading

I am using datatable plugin in a visualfroce page. Below warning popsup only at the time of page loading and table looks good after closing the alert.

dattaable error

Here is the code…

VisualForce Page

$('#mgtable').dataTable({
           sPaginationType: "full_numbers", "bJQueryUI" : true,"sDom": '<"H"lfr>t<"F"ip>',
           "aoColumnDefs": [
               { "aTargets":[ "mgName" ], "mData": "Name",sClass:"Name", "bAutoWidth": false },
               { "aTargets":[ "gcb" ], "mData": "CreatedBy.Name", sClass:"CBName", "bAutoWidth": false },
               { "aTargets":[ "desc" ], "mData": "Client_Group_Description__c", sClass:"CGDesc", "bAutoWidth": true }
           ],
          "fnInitComplete": function(oSettings) { 
                  MasterDetailListController1.refreshMasterGroupList(function(result, event){
                     if(event.type == 'exception') {
                        alert(event.message);         
                     } else {   
                       $('#mgtable').dataTable().fnAddData(result);         
                     }
                   });
           }

    }); 

    <table id="mgtable" class="display">
        <thead>
            <th class="mgName">Master Group Name</th>
            <th class="gcb">Group Created By</th>
            <th class="desc">Description</th>

        </thead>
        <tbody></tbody>
    </table>

Apex Controller

public with sharing class DataTableController { 

  @RemoteAction
  public static list<Client_Group__c> refreshMasterGroupList() {


    return [select id,Name,CreatedBy.Name,Client_Group_Description__c from Client__c order by Name];     



    }

Best Answer

Sounds like your JSON data does not include the Client_Group_Description__c field (in all cases).

  • Does your user have permission to see this field?
  • Can you confirm that the field is in your @RemoteAction response payload on all records returned in the list?

Update: per Josh Kaplan, Salesforce changed the behavior prior to Spring '13 of the JSON serializer to omit fields (properties) which have null values in them, but apparently this change in behavior was reverted back to including the properties which had null values in Spring '13.

If this is indeed still the case, the first option I can think of off the top of my head would be to return your own type rather than returning the sObject type, using an inner class on your controller.

public with sharing class DataTableController { 

    public class ClientGroup {
        public string Id { get; set; }
        public string Name { get; set; }
        public string CreatedByName { get; set; }
        public string ClientGroupDescription { get; set; }

        public ClientGroup(Client__c client) {
            this.Id = client.Id;
            this.Name = client.Name;
            this.CreatedByName = client.CreatedBy.Name;
            this.ClientGroupDescription = client.Client_Group_Description__c;

            // in the event that this still serializes null values and omits the property
            // it can be coded like this:
            //
            //  if (client.Client_Group_Description__c == null) {
            //    this.ClientGroupDescription = '';
            //  } else {
            //    this.ClientGroupDescription = client.Client_Group_Description__c;
            //  }
            //
        }
    }

    @RemoteAction
    public static List<ClientGroup> refreshMasterGroupList() {

        List<ClientGroup> clientGroups = new List<ClientGroup>();

        for (Client__c client : [SELECT Id
                                    , Name
                                    , CreatedBy.Name
                                    , Client_Group_Description__c 
                                FROM Client__c 
                                ORDER BY Name]) {

            // convert to our inner class type
            clientGroups.add(new ClientGroup(client));
        }     

        return clientGroups;

    }
}