PHP en AJAX wat is hier fout aan? Weet niet of dit in PHP of JS thuishoord

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior DevOps-ontwikkelaar eIDAS

Functie­omschrijving Burgers en bedrijven veilig en betrouwbaar digitaal toegang geven tot diensten en producten van het ministerie van Economische Zaken en Klimaat. Als senior DevOps-ontwikkelaar bouw je daar letterlijk aan mee. En dat doe je bij DICTU: een van de grootste en meest vooruitstrevende ICT-dienstverleners van de Rijksoverheid. Jij werkt mee aan de doorontwikkeling van eIDAS, dat staat voor Electronic IDentification Authentication and trust Services. Deze koppeling maakt de grensoverschrijdende authenticatie op overheidswebsites binnen de Europese Unie mogelijk. Het ministerie van Economische Zaken en Klimaat heeft één moderne toegangspoort voor zijn diensten en inspecties. Enkele daarvan zijn dankzij eIDAS inmiddels

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Front-end Developer Vue.js Meewerkend voorman

Functieomschrijving Ben jij een ervaren Front-end Developer, bedreven in Vue.js en lijkt het jou gaaf om als meewerkend voorman verantwoordelijk te zijn voor de ontwikkeling van drie junior ontwikkelaars? Werk jij graag aan diverse projecten t.b.v. het vergroten van klant- en medewerkerbeleving? Lee dan snel verder! Het onderhouden, ontwikkelen en testen van front-end software van diverse klant- en medewerkersapplicaties; Het ontwikkelen van maatwerk front-end oplossingen in Vue.js en participeren in een scrumteam; Verantwoordelijk voor het begeleiden en coachen van drie junior front-end developers; Verantwoordelijk voor code-reviews en het opstellen van de juiste documentatie zoals userstories en api ontwerp; Participeren in

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Donald Boers

Donald Boers

07/06/2018 12:00:16
Quote Anchor link
Ik werk aan een blogpost pagina, met bovenaan het originele artikel, daaronder de reacties, en helemaal onderaan een reactie formulier. Om de pagina niet te hoeven te verversen probeer ik AJAX te integreren. Dit is het AJAXgedeelte
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$(function() {
    var lastChecked = '';
    
    function addResp(type, resp) {
        $("#post-reponses").append(
            "<div class='resp "+ type +"'>"+ resp +"</div>"
        );
    };
    
    function waitForResp() {
        $.ajax({
            type: "GET",
            url: "/responses?since="+lastChecked,
            async: true,
            cache: false,
            timeout:5000,
            success: function(data) {
                if (data.respons.length > 0) {
                    lastChecked = data.lastChecked;
                    data.respons.forEach(function(item) {
                        addResp("respons", item.name);
                    });
                }
                setTimeout(
                    waitForResp,
                    1000
                );
            }
        })
    };
    waitForResp();

});

In de functie responses heb ik het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public function responsesAction()
    {
        if (empty($_GET['since']))
        {
            $responses    =    $this->blog->get_responses();
        }
        else
        {
            $responses    =    $this->blog->get_responses($_GET['since']);    
        }
        
        $data    =    $responses;
        header('Content-Type: application/json');
        
        echo json_encode(array(
            'respons'        =>    $data,
            'lastChecked'     =>     time()
        ));
        
    }

En in de query het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public function get_responces($response_date)
    {
        $sql    =    "SELECT *
                       FROM `post_responses`";
                      
        $params = array();
        if ($response_date)
        {
            $sql    .=    " WHERE `response_date` > :response_date";
            $params[':response_date'] = $response_date;    
        }
        
        $stmt = $this->pdo->prepare($sql . " ORDER BY `post_id` DESC");
        $stmt->execute($params);
            
        return $stmt->fetchAll(PDO::FETCH_ASSOC);    
    }

Ik blij echter de foutmelding krijgen dat data.respons undefined is. Zit nu al een uur te staren maar zie niet waar ik er naast zit. en paar extra ogen zouden nu welkom zijn.

Alvast bedankt
Gewijzigd op 07/06/2018 12:03:57 door - Ariën -
 
PHP hulp

PHP hulp

04/08/2020 10:07:47
 
Ben van Velzen

Ben van Velzen

07/06/2018 12:04:27
Quote Anchor link
Wat gebeurt er als je de URL die je gebruikt direct oproept in de browser?
 
- Ariën -
Beheerder

- Ariën -

07/06/2018 12:05:12
Quote Anchor link
Gooi data eens door een alert in je JavaScript. Wat geeft dit terug?
 
Donald Boers

Donald Boers

07/06/2018 12:25:24
Quote Anchor link
@Ben van Velzen en @ - Ariën - Het lijkt er sterk op dat de fout in de controller zit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public function responsesAction()
    {
        if (empty($_GET['since']))
        {
            $responses    =    $this->blog->get_responces();
        }
        else
        {
            $responses    =    $this->blog->get_responces($_GET['since']);    
        }
        
        $data    =    $responses;
        header('Content-Type: application/json');
        
        echo json_encode(array(
            'respons'        =>    $data,
            'lastChecked'     =>     time()
        ));
        
    }

Met het gebruik van een alert (zoals - Ariën -) voorsteld krijg ik namelijk de melding


<b>Fatal error</b>: Uncaught ArgumentCountError: Too few arguments to function Model_Blog::get_responces()

Dus er is iets fout in de opbouw van de query ofwel de manier hoe ik deze in de Controller verwerk


Toevoeging op 07/06/2018 12:27:53:

Ik zie alleen niet wat
Gewijzigd op 07/06/2018 12:26:43 door Donald Boers
 
Ben van Velzen

Ben van Velzen

07/06/2018 12:38:57
Quote Anchor link
Nee, de fout is dat je niet genoeg argumenten meegeeft, maar gebeurt dat alleen wanneer je geen since hebt?
 
Thomas van den Heuvel

Thomas van den Heuvel

07/06/2018 14:32:35
Quote Anchor link
Maak er
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
public function get_responces($response_date=false)

van zodat dit een optioneel argument wordt wat niet per se meegegeven hoeft te worden?
 
Donald Boers

Donald Boers

07/06/2018 18:27:49
Quote Anchor link
@Thomas van den Heuvel. Helemaal top Thomas. Dat heeft idd die fout weggenomen en de berichten worden geladen. Ik heb nu echter een ander probleem. Maar ik weet niet zo goed of dat hier thuishoort want het is duidelijk JS/AJAX gerelateerd. k vertel toch maar even wat het probleem is: Met jou hulp worden inderdaad de aanwezige reacties getoond, alleen blijft de functie zich herhalen dus het word een hele lange lijst met steeds dezelfde reacties. Dus er zit een fout in de AJAX functie

Toevoeging op 07/06/2018 19:18:51:

Ik heb dit inmiddels opgelost. In plaats van de if statement en de setTimeout function apart te hebben heb ik er nu een if/else statement van gemaakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
                if (data.respons.length > 0) {
                    lastChecked = data.lastChecked;
                    data.respons.forEach(function(item) {
                        addResp("respons", item.name);
                        addResp("respons", item.response);
                    });
                }
                else
                {
                    setTimeout(waitForResp, 1000);
                }
 
Ben van Velzen

Ben van Velzen

07/06/2018 22:22:24
Quote Anchor link
Gooi eens een $("#post-reponses").empty(); voor de forEach. Ik vind het overigens grappig dat het op de ene plek een respons is, de andere een reponse en nog weer op een andere plek een responce. Het is response.
 
Jacco Engel

Jacco Engel

08/06/2018 12:40:53
Quote Anchor link
*Dom van mijn kant*
Gewijzigd op 08/06/2018 12:41:37 door Jacco Engel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.