2014-09-30 32 views
3

糟糕,看起来我错了。正如@MDeSchaepmeester & @charlietfl指出它应该工作,我现在看到它的确如此。现在的问题是它不呈现DataTable。Javascript数组传递到函数时丢失内容

任何建议,为什么它不加载到DataTable中没有错误,欢迎!

这里所要求的所有代码:

function PartnerListSupportTickets() { 

    jQuery("#loader").show(); 

    var idOpen = 'tickets-tbl-open'; 
    var idOnHold = 'tickets-tbl-on-hold'; 
    var idDeferred = 'tickets-tbl-deferred'; 
    var idClosed = 'tickets-tbl-closed'; 
    var tblDataOpen = []; 
    var tblDataOnHold = []; 
    var tblDataDeferred = []; 
    var tblDataClosed = []; 
    var tblEmptyMsg = []; 

    tblEmptyMsg.push({ 
     ticket: 'No tickets available for this category', 
     postcode: '-', 
     state: '-', 
     customer: '-', 
     status: '-', 
     priority: '-', 
     fault: '-', 
     category: '-', 
     author: '-', 
     owner: '-', 
     age: '-', 
     lastupdate: '-' 
    }); 

    var get_data_url = '/sma-php/gettickets.php?var=PARTCK&pid=' + sessionStorage.party_id; 

    jQuery.getJSON(get_data_url, function(data) { 

     OpenNum = 0; 
     OnHoldNum = 0; 
     DeferredNum = 0; 
     ClosedNum = 0; 

     jQuery.each(data, function(i, d) { 

      var status = d.status; 
      status = status.toLowerCase(); 

      if(status == 'closed') { 
       var now = moment(); 
       var then = moment(d.create_date); 
       d.days_age = now.diff(then, 'days'); 
      }; 

      switch(status) { 
       case('open'): 
        OpenNum = OpenNum + 1; 
        tblDataOpen.push({ 
         ticket: '<span id="' + d.ticket_id + '" class="ticket-id-class">' + d.short_title + '</span>', 
         postcode: d.postcode, 
         state: d.state, 
         customer: d.customer_name, 
         status: d.status, 
         priority: '<font color="' + d.color + '">' + d.priority + '</font>', 
         fault: d.fault_type, 
         category: d.category, 
         author: d.author_name, 
         owner: d.owner_name, 
         age: d.days_age, 
         lastupdate: d.update_date 
        }); 
       break; 

       case('on hold'): 
        OnHoldNum = OnHoldNum + 1; 
        tblDataOnHold.push({ 
         ticket: '<span id="' + d.ticket_id + '" class="ticket-id-class">' + d.short_title + '</span>', 
         postcode: d.postcode, 
         state: d.state, 
         customer: d.customer_name, 
         status: d.status, 
         priority: '<font color="' + d.color + '">' + d.priority + '</font>', 
         fault: d.fault_type, 
         category: d.category, 
         author: d.author_name, 
         owner: d.owner_name, 
         age: d.days_age, 
         lastupdate: d.update_date 
        }); 
       break; 

       case('deferred'): 
        DeferredNum = DeferredNum + 1; 
        tblDataDeferred.push({ 
         ticket: '<span id="' + d.ticket_id + '" class="ticket-id-class">' + d.short_title + '</span>', 
         postcode: d.postcode, 
         state: d.state, 
         customer: d.customer_name, 
         status: d.status, 
         priority: '<font color="' + d.color + '">' + d.priority + '</font>', 
         fault: d.fault_type, 
         category: d.category, 
         author: d.author_name, 
         owner: d.owner_name, 
         age: d.days_age, 
         lastupdate: d.update_date 
        }); 
       break; 

       case('closed'): 
        ClosedNum = ClosedNum + 1; 
        tblDataClosed.push({ 
         ticket: '<span id="' + d.ticket_id + '" class="ticket-id-class">' + d.short_title + '</span>', 
         postcode: d.postcode, 
         state: d.state, 
         customer: d.customer_name, 
         status: d.status, 
         priority: '<font color="' + d.color + '">' + d.priority + '</font>', 
         fault: d.fault_type, 
         category: d.category, 
         author: d.author_name, 
         owner: d.owner_name, 
         age: d.days_age, 
         lastupdate: d.update_date 
        }); 
       break; 

       default: 
      }; 

     }); 
     if(OpenNum > 0) { 
      renderPartnerTicketsList(tblDataOpen, idOpen, true); 
     } else { 
      renderPartnerTicketsList(tblEmptyMsg, idOpen, true); 
     }; 
     if(OnHoldNum > 0) { 
      renderPartnerTicketsList(tblDataOnHold, idOnHold, true); 
     } else { 
      renderPartnerTicketsList(tblEmptyMsg, idOnHold, true); 
     }; 
     if(DeferredNum > 0) { 
      renderPartnerTicketsList(tblDataDeferred, idDeferred, true); 
     } else { 
      renderPartnerTicketsList(tblEmptyMsg, idDeferred, true); 
     }; 
     if(ClosedNum > 0) { 
      renderPartnerTicketsList(tblDataClosed, idClosed, true); 
     } else { 
      renderPartnerTicketsList(tblEmptyMsg, idClosed, true); 
     }; 

     jQuery('a[href="#tab1c47048a"]').html('Open Tickets<span class="ticket-count">' + OpenNum + '</span>'); 
     jQuery('a[href="#tab281c055c"]').html('On Hold Tickets<span class="ticket-count">' + OnHoldNum + '</span>'); 
     jQuery('a[href="#tab328b0619"]').html('Deferred Tickets<span class="ticket-count">' + DeferredNum + '</span>'); 
     jQuery('a[href="#tab26b60552"]').html('Closed Tickets<span class="ticket-count">' + ClosedNum + '</span>'); 
    }) 
    .done(function() { 
     jQuery("#loader").fadeOut("slow"); 
    }) 
    .fail(function(jqxhr, textStatus, error) { 
     var sysError = textStatus + ", " + error; 
     showPopupMsg(errorClass, logoutFlag, "There was an error retrieving your Support Tickets List.<br/>Page wll not load from this point and you will be returned to our home page...<br/>Error: " + sysError); 
    }); 
}; 

function renderPartnerTicketsList(tblData, id, initLoad) { 

    // Set up data for DataTable plugin 

    if (!initLoad) { 
     var tbl = jQuery('#' + id).DataTable(); 
     tbl.clear(); 
     tbl.rows.add(tblData); 
     tbl.draw(); 
     return; 
    }; 

    // Bind DataTable plugin 
    var tblHtml = '<table cellpadding="0" cellspacing="0" border="0" class="display" id="' + id + '"><thead><tr>'; 
    tblHtml += '<th>Ticket</th>'; 
    tblHtml += '<th>Postcode</th>'; 
    tblHtml += '<th>State</th>'; 
    tblHtml += '<th>Customer</th>'; 
    tblHtml += '<th>Status</th>'; 
    tblHtml += '<th>Priority</th>'; 
    tblHtml += '<th>Fault</th>'; 
    tblHtml += '<th>Category</th>'; 
    tblHtml += '<th>Author</th>'; 
    tblHtml += '<th>Owner</th>'; 
    tblHtml += '<th>Age</th>'; 
    tblHtml += '<th>Last Update</th>'; 
    tblHtml += '</tr></thead><tbody></tbody></table>'; 

    jQuery('#' + id + '-container').html(tblHtml); 

    jQuery('#' + id).dataTable({ 
     data: tblData, 
     columns: [ 
      { data: "ticket" }, 
      { data: "postcode" }, 
      { data: "state" }, 
      { data: "customer" }, 
      { data: "status" }, 
      { data: "priority" }, 
      { data: "fault" }, 
      { data: "category" }, 
      { data: "author" }, 
      { data: "owner" }, 
      { data: "age" }, 
      { data: "lastupdate" } 
     ], 
     pageLength: 25, 
     order: [12, 'desc'], 
     "scrollCollapse": false, 
     "jQueryUI": true, 
     responsive: true 
    }); 
}; 

我失去了数组内的值在下面,一旦我把它传递给函数的代码。我在我的页面中使用jQuery DataTables。虽然我没有语法错误,但由于空数组而导致代码失败。

主要代码:

 jQuery.each(data, function(i, d) { 
      tblDataOpen.push({ 
       ticket: '<span id="' + d.ticket_id + '" class="ticket-id-class">' + d.short_title + '</span>', 
       postcode: d.postcode, 
       state: d.state, 
       customer: d.customer_name 
      }); 

console.log(tblDataOpen); // <=== SHOWS THE ARRAY AS EXPECTED 

      renderPartnerTicketsList(tblDataOpen, 'open'); 

功能:

function renderPartnerTicketsList(tblData, id) { 

console.log(tblData); // <=== SHOWS AN EMPTY OBJECT 

     var tblHtml = '<table cellpadding="0" cellspacing="0" border="0" class="display" id="' + id + '"><thead><tr>'; 
     tblHtml += '<th>Ticket</th>'; 
     tblHtml += '<th>Postcode</th>'; 
     tblHtml += '<th>State</th>'; 
     tblHtml += '<th>Customer</th>'; 
     tblHtml += '</tr></thead><tbody></tbody></table>'; 

     jQuery('#' + id + '-container').html(tblHtml); 

    console.log(tblData); 

     jQuery('#' + id).dataTable({  
      data: tblData, 
      columns: [ 
       { data: "ticket" }, 
       { data: "postcode" }, 
       { data: "state" }, 
       { data: "customer" } 
      ], 
      pageLength: 25, 
      order: [3, 'desc'], 
      "scrollCollapse": false, 
      "jQueryUI": true, 
      responsive: true 
     }); 
    }; 
+0

您将值传递给tblData,使用tblData而不是tblDataOpen。 – 2014-09-30 11:28:37

+0

对不起Alex G.我更正了上面的代码。我在函数 – TheRealPapa 2014-09-30 11:29:44

+0

中使用tblData尝试传递一个克隆的副本 - '$ .extend(true,[],tblDataOpen);'render到'renderPartnerTicketsList' – vsync 2014-09-30 11:29:49

回答

0

这样的代码:

console.log(tblDataOpen); // <=== SHOWS THE ARRAY AS EXPECTED 

     renderPartnerTicketsList(tblDataOpen, 'open'); 

作品。真。数百万人每天使用它数十亿次。

所以这意味着问题必须在其他地方。要调试该问题,您需要在函数renderPartnerTicketsList()中设置断点,然后浏览器停止,查看调用堆栈。我的猜测是renderPartnerTicketsList()也是从其他地方调用的。

+0

明白了。我发现了这个问题,它有(令人尴尬!)处理元素ID的拼写错误...这是发生了什么,我猜想连续12小时后,10个能量饮料!我已经关闭了Q. – TheRealPapa 2014-09-30 12:36:22

相关问题