Ik heb een simpele AJAX functie waarmee ik verschillende gegevens realtime aan een gebruiker wil tonen zoals aantal nieuwe berichten etc. Dit is wat ik zo ver heb:

HTML

<ul>
    <li>Totaal berichten<span class="badge tot_berichten"><?= $tot_berichten ?></span></li>
    <li>Nieuwe berichten<span class="badge nw_berichten"><?= $nw_berichten ?></span></li>
</ul>


Javascript:

function gebruikersAantallen(){
    $.ajax({
        type: "POST",
        url: "/gebruikers/gebruikersAantallen",
		dataType: 'json',
        async: true,
        cache: false,
        timeout:50000,
		success: function(data){
		    if ( data ) {
				$(".tot_berichten").html(data.tot_berichten);
				$(".nw_berichten").html(data.nw_berichten);
            }
            setTimeout(gebruikersAantallen, 10000);
        }
    });
};
gebruikersAantallen();


Controller gebruikersAantallen

	public function gebruikersAantallenAction()
	{
		$gebruiker	=	$this->session->get('gebruiker');
		$aantallen  =   $this->aantallen->get_profiel_aantallen($gebruiker);
		
		
		if ($aantallen)
		{
			$data = array(
        		'tot_berichten' => $tot_berichten,
        		'nw_berichten'  => $nw_berichten
	    	);
		
			header('Content-Type: application/json');
			echo json_encode($data, JSON_FORCE_OBJECT);
		}
		exit();
		
	}

Maar op de een of andere manier krijg ik voore beide variabelen undefined. Ziet iemand wat ik fout doe. Bij voorbaat dank
wat krijg je als je op regel 10 van je javascript tussenvoegt:

console.log(data);
Ivo P op 06/11/2016 15:23:25

wat krijg je als je op regel 10 van je javascript tussenvoegt:

console.log(data);

Hoi Ivo. Hartelijk bedankt voor je reactie. Ik heb dat geprobeert en toen kreeg ik voor beide variabelen NULL als waarde terug. Vervolgens heb ik het met harde waardes geprobeerd, dus:

$data = array(
    'tot_berichten' => 50,
    'nw_berichten'  => 10
);

dan krijg ik geen fout en worden de juiste waardes weergegeven, hetgeen doet vermoeden dat er iets fout zou zijn met de queries. Maar als ik de betreffende queries rechtstreeks uitvoer in phpMyadmin probeer worden wel de juiste waardes weergegeven. Wat zou de reden kunnen zijn denk je?
Werkt /gebruikers/gebruikersAantallen uberhaupt wel goed in je browser?
Ergens lijkt de AJAX-request niet goed te werken. Heb je ook al gekeken in je browser bij alle requests, en wat er met die URL gebeurt? Kan zijn dat die stuit op een Error 500?
- Ariën - op 06/11/2016 20:24:39

Werkt /gebruikers/gebruikersAantallen uberhaupt wel goed in je browser?
Ergens lijkt de AJAX-request niet goed te werken. Heb je ook al gekeken in je browser bij alle requests, en wat er met die URL gebeurt? Kan zijn dat die stuit op een Error 500?

Het blijkt dat ik een illigal string offet krijg op de volgende waarde


$gebruiker_credits  =   $this->aantallen->get_credits($gebruiker);
$credits            =   $gebruiker_credits['credits'];



Warning: Illegal string offset 'credits' in C:\.......\private\includes\classes\Controller\gebruikers\Page.php


Dit is de betreffende query:

	public function get_credits($gebruiker)
	{
		$sql = "SELECT `credits`
		          FROM `gebruiker_credits`
				 WHERE `gebruiker_id` = ?";
				 
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute(array($gebruiker));
		
		return $stmt->fetch();			 				 	
	}
Wat zit er volgens print_r in $gebruiker_credits?
- Ariën - op 06/11/2016 21:21:47

Wat zit er volgens print_r in $gebruiker_credits?


Hoi Ariën. Bedankt voor je reactie. Ik had als test bij een gebruiker 30 credits toegevoegd. Toen kreeg ik die Illegal string offset. Ik heb het aantal zojuist handmatig veranderd in 5 en dan is alles goed. Waar ligt dat aan?
Maar, wat zit er in die array?
- Ariën - op 06/11/2016 21:39:58

Maar, wat zit er in die array?

@ Ariën. Nogmaals bedankt voor de reactie. Blijkbaar zat de fout nog in het cache. Want nadat ik alles een keer van de remote erver had verwijderd en nogmaals geupload werkt alles nu prima. Dank je nogmaals voor de input
Het lijkt erop dat je data ophaalt. Een GET request lijkt dan meer op zijn plaats.

Om caching, en dan met name in IE te voorkomen, voeg ik aan de url meestal een random waarde toe

iets als

url: '/some/url/' + Math.random(),

*check syntax even
Waar komen in je PHP fragment $tot_berichten en $nw_berichten vandaan?

Zoals je zelf al zegt:
Vervolgens heb ik het met harde waardes geprobeerd, ..., dan krijg ik geen fout en worden de juiste waardes weergegeven


Waar rook is is vuur?

Reageren