Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Methode aus Klasse in Ajax laden

Einklappen

Neue Werbung 2019

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

  • PHP Methode aus Klasse in Ajax laden

    Hi,

    ich möchte das in Ajax eine Funktion (ladeOffen()) aus einer PHP Klasse alle 10 Sekunden geladen wird. Ich habe gegoogelt und folgendes Konstrukt gebaut:

    TicketRepository.php
    PHP-Code:
    <?php
    class TicketRepository
    {
      function 
    ladeOffen()
        {}
    }
    ?>
    offenHandler.php
    PHP-Code:
    <?php
    require_once 'TicketRepository.php';

    if(isset( 
    $_POST['invoiceno'] )) {
         
    $myTicketRepository = new TicketRepository();
         
    $result $myTicketRepository->ladeOffen();
         echo 
    $result;
    }

    ?>
    custom.js
    Code:
    $(document).ready(function() {
      setInterval(function() {
       if (window.location.href.indexOf("seiteOffen1") > -1) {
        $.ajax({
           type: "POST",
           data: {
             invoiceno:jobid
           },
           url: "../../src/ticket/offenHandler.php",
           dataType: "html",
           async: false,
           success: function(data) {
             result=data;
           }
         });
       };
     },   10000);
    });
    das funktioniert so natürlich noch nicht. z. B. weil jobid undefiniert ist

    kann mir jemand helfen mein Ziel zu erreichen?

  • #2
    1. Werden mit AJAX keine Funktionen "geladen", sondern es werden HTTP-Requests an den Webserver geschickt, worauf der Webserver mit einem HTTP-Response antwortet. Solange du das so nicht verstanden hast, solltest du nochmal ein oder zwei Schritte zurück machen und HTTP-Grundlagen lernen.

    2. "Funktioniert nicht" ist keine brauchbare Fehlerbeschreibung. Wie sieht der HTTP-Request und wie sieht der HTTP-Response aus?

    3. Wenn jobid nicht definiert ist, musst du es halt definieren? Was erwartest du jetzt vom Forum hierzu? Glaubst du es kriecht jemand durch die Internetleitung und definiert jobid für dich?

    Kommentar


    • #3
      ist schon klar das das nix für Anfänger ist. in der Regel hangele ich mich an funktionierendem Code entlang und verstehe es dann irgendwann

      ich habe es jetzt angepasst:

      Code:
      $(document).ready(function() {
        setInterval(function() {
         if (window.location.href.indexOf("seiteOffen1") > -1) {
          $.ajax({
             type: "POST",
             data: {
               class:'TicketRepository'
             },
             url: "../../src/Ticket/offenHandler.php",
             dataType: "html",
             async: false,
             success: function(data) {
               result=data;
             }
           });
         };
       },   10000);
      });
      der Server antwortet:
      <br />
      <b>Fatal error</b>: Uncaught Error: Class 'TicketRepository' not found in C:\xampp\htdocs\ticketauswertung\src\Ticket\offenH andler.php:5
      Stack trace:
      #0 {main}
      thrown in <b>C:\xampp\htdocs\ticketauswertung\src\Ticket\off enHandler.php</b> on line <b>5</b><br />

      Kommentar


      • #4
        Zitat von didi577 Beitrag anzeigen
        ist schon klar das das nix für Anfänger ist. in der Regel hangele ich mich an funktionierendem Code entlang und verstehe es dann irgendwann
        Es gibt keine Abkürzungen beim Lernen. Die HTTP-Grundlagen musst du so oder so lernen. Entweder früher oder später. Aber je früher, desto schneller kommst du voran.

        Zitat von didi577 Beitrag anzeigen
        der Server antwortet:
        <br />
        <b>Fatal error</b>: Uncaught Error: Class 'TicketRepository' not found in C:\xampp\htdocs\ticketauswertung\src\Ticket\offenH andler.php:5
        Stack trace:
        #0 {main}
        thrown in <b>C:\xampp\htdocs\ticketauswertung\src\Ticket\o ff enHandler.php</b> on line <b>5</b><br />
        Na dann lies die Fehlermeldung. Da steht doch alles drin.

        Übrigens solltest du bei PHP-Dateien das ?> am Ende immer weg lassen. Und bei require und include solltest du immer mit absoluten Dateipfaden arbeiten.

        Kommentar


        • #5
          in offenHandler.php hat der namespace gefehlt:

          namespace App\Ticket;

          jetzt hat sich bei sonst gleichem Code die Fehlermeldung verändert:

          Fatal error: Uncaught ArgumentCountError: Too few arguments to function App\Ticket\TicketRepository::__construct(), 0 passed in C:\xampp\htdocs\ticketauswertung\src\Ticket\offenH andler.php on line 6 and exactly 1 expected in C:\xampp\htdocs\ticketauswertung\src\Ticket\Ticket Repository.php:12 Stack trace: #0 C:\xampp\htdocs\ticketauswertung\src\Ticket\offenH andler.php(6): App\Ticket\TicketRepository->__construct() #1 {main} thrown in C:\xampp\htdocs\ticketauswertung\src\Ticket\Ticket Repository.php on line 12

          die Klasse TicketRepository hat einen constructor:

          PHP-Code:
          public function __construct(PDO $pdo)
              {
                  
          $this->pdo $pdo;
              } 
          da ich in offenHandler.php ein neues Object anlege wird wahrscheinlich der Fehler geworfen ??

          PHP-Code:
          <?php
          namespace App\Ticket;
          require_once 
          'TicketRepository.php';

          if(isset( 
          $_POST['class'] )) {
               
          $myTicketRepository = new TicketRepository();
               
          $result $myTicketRepository->ladeOffen();
               echo 
          $result;
          }

          ?>
          wie kann ich das lösen ?

          Kommentar


          • #6
            Warum lernst du nicht erstmal die Grundlagen?

            Im Konstruktor wird ein Parameter erwartet. Den solltest du halt auch übergeben. Steht aber so auch in der Fehlermeldung, die du lesen solltest.

            Ein Forum ist nicht dafür da Fehlermeldungen für dich zu lesen.

            Kommentar


            • #7
              hey, bin jetzt weiter gekommen...habe jetzt folgendes.

              offenHandler.php
              PHP-Code:
              <?php
              namespace App\Ticket;

              require_once 
              'TicketRepository.php';
              require_once 
              'OffenModel.php';
              use 
              PDO;

              if(isset( 
              $_POST['class'])) {
                   
              $myTicketRepository = new TicketRepository($pdo = new PDO('mysql:dbname=crmdb; host=192.168.0.42''abgleich''Abgleich#2017'));
                   
              $result $myTicketRepository->ladeTabelle11();
                   echo 
              json_encode($result);
              }

              ?>
              custom.js
              Code:
              $(document).ready(function() {
              
                       $.ajax({
                          type: "POST",
                          data: {
                            class:'TicketRepository'
                          },
                          url: "../../src/Ticket/offenHandler.php",
                          dataType: "json",
                          async: false,
                          success: function(data) {
              
                            $('#tabelleOffen11').DataTable( {
                              "autoWidth": false,
                                "searching": false,
                                "paging":   false,
                                "info":     false,
                                "language": {
                                   "url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/German.json"
                                 },
                                 "dataSrc": "",
                                 "processing": true,
                                 "columns": [
                                 { data: 'user22' },
                                 { data: 'anzahl_leer' },
                                 { data: 'schnitt_second' },
                                 { data: 'anzahl_nicht_leer' },
                                 { data: 'schnitt_third' },
                                 { data: 'anzahl_gesamt' },
                               ]
              
                            } );
                          },
                      } );
              } );
              Der Server sendet das richtige und erwartete Ergebnis: console.log(data); Die HTML Tabelle wird aber nicht gefüllt. Wo muss ich jetzt noch ran?

              Kommentar


              • #8
                Du verwendest die Variable data ja nirgendwo.

                Kommentar


                • #9
                  ja, Danke habe es jetzt auch gesehen

                  Kommentar


                  • #10
                    ich möchte jetzt mit folgender Methode noch erreichen das die Aktualisierung alle x Sekunden automatisch erfolgt:

                    Code:
                    $(document).ready(function() {
                      setInterval(function() {
                       if (window.location.href.indexOf("seiteOffen1") > -1) {
                    
                             hier muss der Code rein der aktualisiert
                    
                       };
                     },   5000);
                    });
                    habt ihr eine gute Idee mit der es funktioniert ??

                    $('#tabelleOffen11').DataTable().ajax.reload(); funktioniert nicht da die Tabelle ja bereits existiert. Die Daten werden zwar sauber vom Server geladen aber nicht n der Tabelle aktualisiert.

                    Kommentar

                    Lädt...
                    X