Avec l'aide de WP.SE, j'ai appris à envoyer des données d'un formulaire à WP_REST, mais maintenant, je ne parviens pas à renvoyer une erreur personnalisée. Je peux transmettre avec succès des informations au WP_REST_Response
et j'ai ajouté un contrôle dans WP_REST_Response
et je veux qu'il renvoie le message d'erreur à la fonction d'erreur AJAX, mais j'ai des problèmes.
Par exemple, sur ma boîte locale, l'adresse IP est ::1
et si je crée une fonction en PHP:
function ipAddress() {
if (isset($_SERVER['REMOTE_ADDR'])) :
$ip_address = clean($_SERVER['REMOTE_ADDR']);
else :
$ip_address = "undefined";
endif;
return $ip_address;
}
et après avoir cherché comment retourner le chèque, je suis tombé sur:
alors j'ai ajouté à mon WP_REST_Response
:
function vader(\WP_REST_Request $request) {
if (ipAddress() == "::1") :
return json_encode(array(
'error' => 'you are localhost'
));
endif;
}
et dans mon vader.js si j'utilise:
error: function(data) {
throw data.error;
},
mais je n'ai aucune erreur dans la console et il affiche {"error":"you are localhost"}
mais je veux juste que la valeur aille à la fonction d'erreur.
En regardant la documentation jQuery.ajax () j'ai trouvé statusCode
et je peux obtenir:
if (ek_ip_address() == "::1") :
return new WP_Error('foo', 'bar', array('status' => 404));
endif;
et:
statusCode: {
404: function() {
$('#testForm').append("thrown 404s");
}
}
Existe-t-il un moyen de faire apparaître error
ou ai-je mal compris AJAX error
? Qu'est-ce que je fais de travers et comment puis-je obtenir la valeur JSON renvoyée par WP_REST_REQUEST
pour accéder à la fonction error
?
Un appel Ajax peut être envoyé n'importe où. Il peut s'agir d'un serveur exécutant PHP, d'une route locale virtuelle simulée à l'aide de C # ou de toute autre solution. Ainsi, Ajax se fiche de la réponse, car elle ne peut pas la comprendre.
Lorsque vous envoyez toute données à partir de votre serveur, tant que l'état est 200 (ou autre chose qu'une erreur), le script Ajax considère qu'il s'agit d'une demande réussie. Ensuite, à vous de gérer la situation en fonction de votre réponse.
Je suis novice en langue anglaise. J'utilise le "erreur"Mot au lieu de "succès" et le retourne en réponse.
$data['status'] = 'error';
$data['message'] = 'Nice! Request has been done.';
return $data;
Le serveur a réussi à exécuter la tâche, mais a envoyé un statut incorrect. Comment Ajax pourrait-il savoir cela?
Ainsi, la section d'erreur d'un appel Ajax est destinée aux cas où il y a un problème lors de la demande, avant la fin, pas après. Après l'envoi de la réponse, Ajax a fait son travail, c'est considéré comme une demande réussie.
Comme le souligne correctement Jack, la requête ayant abouti, vous ne vous retrouverez jamais dans le rappel error
. Vous préférez traiter tout ce que votre serveur a renvoyé dans le callback success
de jQuery.ajax()
:
success: (data) => {
if('error' in data) {
// server returned `error` property in payload - something is wrong!
}
}
Si vous n'utilisez pas ES6:
success:function(data) {
if(data && typeof data.error !== 'undefined') {
// show error message to user
}
}