Ankündigung

Einklappen
Keine Ankündigung bisher.

DataTable mit Ajax aktualisieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • DataTable mit Ajax aktualisieren

    Hallo,

    ich möchte eine dataTable per Ajax zu aktualisieren.
    Mein js:
    Code:
    let btnMonatSeite4 = document.getElementById("btnMonatSeite4");
    btnMonatSeite4.addEventListener("click", function() {
    
      $(document).ready(function() {
          $('#tabelle41').DataTable( {
            "paging":   false,
            "info":     false,
            "searching":   false,
            "ajax": "../../src/ticket/tabelle41.php",
            "bPaginate":true,
            "bProcessing": true,
            "columns": [
            { mData: 'Fachbereich' } ,
            { mData: 'Anzahl' },
            { mData: 'Anteil' }
            ]
          } );
      } );
    
        }, false);
    Mein php:
    PHP-Code:
    <?php
    namespace App\Ticket;

    use 
    PDO;

    $statement $this->pdo->prepare("SELECT user22 AS user22,
      COUNT(t.tnumber) AS tnumber,
      FORMAT((COUNT(t.tnumber) / (SELECT COUNT(t.tnumber) FROM crmdb.tickets t WHERE t.tnumber LIKE ?  AND WEEKOFYEAR(from_unixtime(t.createtime)) = ? AND YEAR(from_unixtime(t.createtime)) = ?))*100, 0) AS anteil
      FROM crmdb.tickets t
      WHERE WEEKOFYEAR(from_unixtime(t.createtime)) = ?
      AND YEAR(from_unixtime(t.createtime)) = ?
      AND t.tnumber LIKE ?
      GROUP BY t.user22 WITH ROLLUP"
    );

    $statement->execute(array('HL-%'442019442019'HL-%'));

    $statement->setFetchMode(PDO::FETCH_CLASS"App\\Ticket\\TicketModel");

    $results $statement->fetchAll(PDO::FETCH_CLASS"App\\Ticket\\TicketModel");

    echo 
    json_encode($results);

     
    ?>
    wenn ich den Button betätige erscheint folgender Fehler:

    DataTables warning: table id=tabelle41 - Invalid JSON response. For more information about this error, please see http://datatables.net/tn/1

    wo ist der Fehler?

  • #2
    Mach die Developer-Tools Deines Browsers auf, gehe zum Reiter Netzwerk (oder Network), schau Dir die Antwort Deines Requests auf tabelle41.php an.

    Dein JSON validieren lassen kannst du z.b. bei https://jsonlint.com/

    Kommentar


    • #3
      Danke. Ich schau mir das morgen nochmal an

      Kommentar


      • #4
        Moin,

        ich bekomme diesen Fehler:

        2019-11-07_08h46_17.png
        Hier der Code:
        PHP-Code:
        <?php
        namespace App\Ticket;

        use 
        PDO;

        $pdo;

        function 
        __construct(PDO $pdo)
        {
          
        $this->pdo $pdo;
        }

        $statement $this->pdo->prepare("SELECT user22 AS user22,
          COUNT(t.tnumber) AS tnumber,
          FORMAT((COUNT(t.tnumber) / (SELECT COUNT(t.tnumber) FROM crmdb.tickets t WHERE t.tnumber LIKE ?  AND WEEKOFYEAR(from_unixtime(t.createtime)) = ? AND YEAR(from_unixtime(t.createtime)) = ?))*100, 0) AS anteil
          FROM crmdb.tickets t
          WHERE WEEKOFYEAR(from_unixtime(t.createtime)) = ?
          AND YEAR(from_unixtime(t.createtime)) = ?
          AND t.tnumber LIKE ?
          GROUP BY t.user22 WITH ROLLUP"
        );

        $statement->execute(array('HL-%'442019442019'HL-%'));

        $statement->setFetchMode(PDO::FETCH_CLASS"App\\Ticket\\TicketModel");

        $results $statement->fetchAll(PDO::FETCH_CLASS"App\\Ticket\\TicketModel");

        echo 
        json_encode($results);

         
        ?>
        Zeile 13 ist diese :
        PHP-Code:
        $statement $this->pdo->prepare("SELECT user22 AS user22, 
        ich vermute es liegt an meine Datenbankverbindung

        wie kann ich das bereinigen ??

        Kommentar


        • #5
          ich vermute es liegt an meine Datenbankverbindung
          Nein. Die Fehlermeldung ist eigentlich eindeutig...

          Using $this when not in object context

          Kommentar


          • #6
            Ist das 1 zu 1 Dein Code? Wenn ja was versuchst du da genau? __construct() gehört in eine Klasse. Du hast keine Klasse.

            Kommentar


            • #7
              Ich verwende diesen Code auch noch in einer Klasse. Die Tabelle wird zuerst beim laden der Seite mit Daten gefüllt. Dort habe ich diesen Code:
              PHP-Code:
              <?php
              namespace App\Ticket;

              use 
              PDO;

              class 
              TicketRepository
              {

                private 
              $pdo;

                public function 
              __construct(PDO $pdo)
                {
                  
              $this->pdo $pdo;
                }

                      function 
              ladeTabelle41($woche$jahr) {

                                        
              $statement $this->pdo->prepare("SELECT user22 AS user22,
                                          COUNT(t.tnumber) AS tnumber,
                                          FORMAT((COUNT(t.tnumber) / (SELECT COUNT(t.tnumber) FROM crmdb.tickets t WHERE t.tnumber LIKE ?  AND WEEKOFYEAR(from_unixtime(t.createtime)) = ? AND YEAR(from_unixtime(t.createtime)) = ?))*100, 0) AS anteil
                                          FROM crmdb.tickets t
                                          WHERE WEEKOFYEAR(from_unixtime(t.createtime)) = ?
                                          AND YEAR(from_unixtime(t.createtime)) = ?
                                          AND t.tnumber LIKE ?
                                          GROUP BY t.user22 WITH ROLLUP"
              );

                                        
              $statement->execute(array('HL-%'$woche$jahr$woche$jahr'HL-%'));

                                        
              $statement->setFetchMode(PDO::FETCH_CLASS"App\\Ticket\\TicketModel");

                                        
              $eingang $statement->fetchAll(PDO::FETCH_CLASS"App\\Ticket\\TicketModel");

                                        return 
              $eingang;

                                      }


                                      }

                                      
              ?>
              Wenn die Seite geladen ist will ich über einen Button die Daten der Tabelle aktualisieren. Dafür verwende ich den Code aus #4
              Wie kann ich diesen korrigieren? Danke schon mal für eure Hilfe...

              Kommentar


              • #8
                ich bin ein Stück weiter gekommen. die Klasse zum Abruf der Daten sieht jetzt so aus:
                PHP-Code:
                <?php
                namespace App\Ticket;

                include 
                'TicketEingang.php';
                use 
                PDO;


                $pdo = new PDO ('mysql:dbname=crmdb; host=192.168.0.42''abgleich''Abgleich#2017');

                $statement $pdo->prepare("SELECT user22 AS user22,
                  COUNT(t.tnumber) AS tnumber,
                  FORMAT((COUNT(t.tnumber) / (SELECT COUNT(t.tnumber) FROM crmdb.tickets t WHERE t.tnumber LIKE ?  AND WEEKOFYEAR(from_unixtime(t.createtime)) = ? AND YEAR(from_unixtime(t.createtime)) = ?))*100, 0) AS anteil
                  FROM crmdb.tickets t
                  WHERE WEEKOFYEAR(from_unixtime(t.createtime)) = ?
                  AND YEAR(from_unixtime(t.createtime)) = ?
                  AND t.tnumber LIKE ?
                  GROUP BY t.user22 WITH ROLLUP"
                );

                $statement->execute(array('HL-%'442019442019'HL-%'));

                $statement->setFetchMode(PDO::FETCH_CLASS"App\\Ticket\\TicketEingang");

                $results $statement->fetchAll(PDO::FETCH_CLASS"App\\Ticket\\TicketEingang");

                echo 
                json_encode($results);

                 
                ?>
                das ist JavaScript:
                Code:
                $(document).ready(function() {
                      $('#tabelle41').DataTable( {
                        "paging":   false,
                        "info":     false,
                        "searching":   false,
                        "ajax": "../../src/ticket/tabelle41.php",
                        "processing": true,
                        "columns": [
                        { data: 'user22' } ,
                        { data: 'tnumber' },
                        { data: 'anteil' }
                        ]
                      } );
                  } );
                die Antwort des Request:
                2019-11-07_19h45_53.png
                die Werte stimmen, aber sie werden nicht in der Tabelle dargestellt
                wo muss ich noch nachbessern?

                Kommentar


                • #9
                  Die Konsole meldet noch einen Fehler, was ist das für einer?

                  Kommentar


                  • #10
                    jquery.dataTables.min.js:62 Uncaught TypeError: Cannot read property 'length' of undefined
                    at jquery.dataTables.min.js:62
                    at k (jquery.dataTables.min.js:4
                    at Object.success (jquery.dataTables.min.js:49)
                    at j (jquery.min.js:2)
                    at Object.fireWith [as resolveWith] (jquery.min.js:2)
                    at x (jquery.min.js:4)
                    at XMLHttpRequest.<anonymous> (jquery.min.js:4)

                    Kommentar


                    • #11
                      https://stackoverflow.com/questions/...h-of-undefined

                      Kommentar


                      • #12
                        den Link habe ich eben auch gefunden, nur was muss ich jetzt genau tun? ich denke ich muss hier ran:
                        Code:
                        "columns": [
                                { data: 'user22' } ,
                                { data: 'tnumber' },
                                { data: 'anteil' }
                                ]

                        Kommentar


                        • #13
                          so funktioniert es:
                          Code:
                          $(document).ready(function() {
                                $('#tabelle41').DataTable( {
                                  "paging":   false,
                                  "info":     false,
                                  "searching":   false,
                                  "ajax": {
                                    "url": "../../src/ticket/tabelle41.php",
                                    "dataSrc": ""
                                  },
                                  "processing": true,
                                  "columns": [
                                  { data: 'user22' } ,
                                  { data: 'tnumber' },
                                  { data: 'anteil' }
                                  ]
                                } );
                            } );

                          Kommentar

                          Lädt...
                          X