Door
Loek Lemmens
op 01-12-2019 12:47
gewijzigd op 01-12-2019 12:47
2.304 views
Hallo,
De data uit de database wil ik graag met AJAX zichtbaar maken. Dit wil ik doen door een array terug te geven vanuit PHP.
D.m.v. Jquery wil ik dan de data netjes presenteren.
De dat terug krijgen zonder een array heb ik werkend maar dan kan ik de data niet presenteren zoals ik zou willen.
Dus ben ik op onderzoek uitgegaan maar loop gewoon vast hierop.
<script type="text/javascript">
jQuery(document).ready(function($) {
select();
function select(){
var data = {
'action': 'select',
'todo': 'catselect',
};
jQuery.post(ajaxurl, data, function(response) {
console.log(response);
});
}
});
</script>
uileg:
Var data 'action' is de PHP functie die word aangeroepen
Var data 'todo' is een if statement waarin gekeken word welke info er gehaald moet worden.
En als je dan toch met UTF-8 werkt loont het ook de moeite om deze charset te selecteren bij het maken van een connectie met je database middels set_charset().
Waarom gebruik je trouwens niet gewoon fetch_all(MYSQLI_ASSOC)? Dan hoef je ook niet rij voor rij eenzelfde array te vullen.
Waar komt "ajaxurl" trouwens vandaan?
En als je data uit de database zichtbaar wil maken middels AJAX, dan zou ik eigenlijk een GET-request verwachten, en geen POST request? Dit zou het debuggen van het AJAX-script ook aanzienlijk makkelijker maken, omdat je die dan rechtstreeks aan zou kunnen roepen met parameters in de querystring. Wel even een andere header introduceren als je in dat script (tijdelijk) HTML-output produceert.
Als ik dan vervolgens in de log kijk van de browser geeft hij NULL aan bij de response
[size=xsmall]Toevoeging op 01/12/2019 14:47:53:[/size]
Het is een code wat ik gebruik in Wordpress. Wordpress heeft directe AJAXcalls geblokt en je bent verplicht om binnen Wordpress gebruik te maken van ajaxurl.
De var action en de var todo corresponderen met php functies die je kunt aanroepen.
Je had ook de documentatie kunnen raadplegen, dan had je gezien dat de callback twee parameters bevat: een key en een value. De key heb je niets niet echt iets aan, want de geretourneerde JSON is een array van arrays/objecten. Ik zou met de value werken, en niet met de key waarbij je refereert aan het oorspronkelijke (resultaat)array.
Het is ook een naamloze functie. De functie "response" bestaat niet. Kijk je ook in je developer console (meestal onder de functietoets F12 in de "console" tab) naar JavaScript foutmeldingen? Dit script gaat waarschijnlijk hard onderuit.
Vergelijk:
$.each(response(function( i ){ ... }))
// ^ ^
Met
$.each(response, function( i ){ ... })
// ^
Dit is ook iets wat je in afzondering kunt testen?
Nee, dat is niet per se nodig want jQuery probeert altijd een "intelligent guess" te doen (omtrent het dataType van de geretourneerde data). Het probleem is niet dat jQuery niet weet wat er teruggegeven wordt, het probleem is dat er op een verkeerde manier geïtereerd wordt over de teruggegeven items (zoals hierboven aangegeven). De JavaScript breekt waarschijnlijk gewoon met een syntaxfout.
Het is natuurlijk wel altijd beter om extra "hints" te geven als je weet wat je terug zou moeten krijgen, maar dit is niet verplicht / geen noodzakelijke voorwaarde voor correcte operatie.
EDIT: zoals de volgende code laat zien heb je geen dataType hint nodig
jquery.each.php