Je kan dan toch 2 arrays tegelijk terug zenden of bij je response array ook een succes maken en deze vullen met de informatie wat je krijgt uit het formulier.
data.errors geeft nog een array terug met weliswaar één item: formerror waarin wederom nog een array zit :-). dus je kan of een lus maken die daar doorheen wandelt of je maakt er data.errors.formerror.empty van. Status => true .. dat klinkt niet. Een status is niet waar of onwaar. Maak er dan success => true van...
Statussen zoals ok en error worden door veel developers toegepast overigens dus trek je niet alles aan. Voordeel is ook dat je meerdere mogelijkheden hebt dan alleen true en false.
Denk aan een payprovider die de status van een betaling doorgeeft met Open, Payed, Cancelled, Denied enz.
(Thomas waarom moet het altijd zo ingewikkeld? al zijn het suggesties die je geeft.)
dank voor de goede tips :) heb de statussen een andere waarde gegeven.
Je hebt het over een lus maken bedoel je dan een loop zoals je al eerder aangaf zoals
for(var i = 0 ; i < response.errors.length ; i++) {
}
Sorry lopen door objecten (in PHP associative arrays) gaat niet lukken merk ik nu.
Je zult je array moeten wijzigen in
<?php
$response = array(
'status' => 'false',
'errors' => array(
'formerrors' => array(
'Meerdere velden zijn niet ingevuld',
'nog een foutmelding'
),
),
);
?>
en zo benaderen in javascript
// in json
var data = {"status":"failure","errors":{"formerrors":["Meerdere velden zijn niet ingevuld","nog een foutmelding"]}};
for(var i = 0 ; i < data.errors.formerrors.length; i++) {
console.log(data.errors.formerrors[i]);
}
[size=xsmall]Toevoeging op 19/09/2018 23:00:34:[/size]
Oke dit werkt prima :) Als er een error is rood bericht met de error en status ok groen bericht.
Nu heb ik nog één vraag betreft de juiste foutafhandeling:
Als ik meerde controles uitvoer dan word de array overschreven tot er geen meer is.
Hoe kan ik toch meerdere controles uitvoeren met een return array
<?php
if(trim($_GET['first_name']) && trim($_GET['email']) == ''){
$response = array(
'status' => 'error',
'errors' => array(
'Je bent vergeten je naam in te vullen',
'Zonder emailadres kunnen wij geen e-mail sturen',
),
);
}
if(trim($_GET['first_name']) == ''){
$response = array(
'status' => 'error',
'errors' => array(
'Je bent vergeten je naam in te vullen',
),
);
}
if(trim($_GET['email']) == ''){
$response = array(
'status' => 'error',
'errors' => array(
'Zonder emailadres kunnen wij geen e-mail sturen',
),
);
}
?>
En als je op het einde je array maakt en deze vult met variabelen? Een lege variablen geeft hij toch niet weer en als deze gevuld is krijg je je foutmeldingen terug.
Of zit ik niet verkeerd?
lijn 6 en 7 zijn inderdaad 2 aparte foutmeldingen, dit omdat er op 2 velden word gecontroleerd of er iets is ingevuld
Met de bovenstaande loop van Frank worden deze netjes terug gecommuniceerd. Omdat ik met een array werk word deze steeds herschreven waardoor ik niet alle errors terug krijg maar enkel de laatste (wat logisch is).
De DRY-methode ga ik even opzoeken of het gaat wat ik zou willen
[size=xsmall]Toevoeging op 20/09/2018 12:35:01:[/size]
Met die variabelen werkt prima voor mij:)
<?php
header('Content-Type: application/json; charset=UTF-8');
$emptyfirstname = "";
$lengthfirstname ="";
$emptymail = "";
if(trim($_GET['first_name']) == ''){
$emptyfirstname = 'Je bent vergeten je naam in te vullen';
}elseif(strlen($_GET['first_name']) <= 1){
$lengthfirstname = 'Een naam met 1 letter bestaat niet';
}
if(trim($_GET['email']) == ''){
$emptymail = 'Zonder emailadres kunnen wij geen e-mail sturen';
}
$response = array(
'status' => 'error',
'errors' => array(
$emptyfirstname,
$lengthfirstname,
$emptymail,
),
);
echo json_encode($response);
?>