Un utilisateur a demandé 👇

J’écris un plugin qui devrait utiliser ajax. Voici mon fichier de plugin principal :

add_action( 'wp_enqueue_scripts', 'fhw_register_script' );

function fhw_register_script() {
	wp_deregister_script( 'jquery' );
	add_action( 'wp_ajax_fhw_do_ajax_request', 'fhw_do_ajax_request' );
	
	wp_register_script( 'jquery', 'http://code.jquery.com/jquery-latest.min.js');
	wp_register_script( 'fhw_formular', plugins_url( '/js/formular.js', __FILE__ ), array( 'jquery' ) );
	
	wp_enqueue_script( 'fhw_formular' );
	
	wp_localize_script( 'fhw_formular', 'ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
	
	wp_enqueue_script( 'jquery' );
}

Donc, si j’appelle form.js, ma console de développement dit

Archivé à Load Capacity – Le serveur a répondu avec le statut 400 (Bad Request)

don fichier admin-ajax.php. Que faire?


(@jakept)

il y a 2 ans, 9 mois

Où est l’appel AJAX réel ? Ou le code est-il attaché pour répondre ? Ce que vous avez ici ne demandera pas à admin-ajax.php du front-end tout seul, donc cela ne causera peut-être pas l’erreur.

Aussi bien que cela, ne chargez pas votre propre jQuery.

Et vous n’avez pas besoin de ce dernier appel pour le mettre en file d’attente. Cela se produit déjà en tant que dépendance de votre script.

Cette réponse a été modifiée il y a 2 ans et 9 mois par.


(@fhwebdesign)

il y a 2 ans, 9 mois

Ok voici mon code comme je l’appelle

jQuery(document).ready( function($) {
	
	$('input').bind("change", function(e) {
		onSelect();
	});
	
	
});

function onSelect() {
	var data = {
		'action': 'fhw_getTyp',
		'typ' : this.value
	};
	jQuery.post(ajax_object.ajax_url, data, function(response) {
		$(".ergebnis").html(response);
	});
};

Cette réponse a été modifiée il y a 2 ans et 9 mois par.


(@bcworkz)

il y a 2 ans, 9 mois

Déplacez votre appel d’action supplémentaire vers ‘wp_ajax_fhw_do_ajax_request’ en dehors du rappel des scripts en file d’attente. Les applications admin-ajax.php ne tentent pas de mettre les scripts en file d’attente. Votre appel d’action supplémentaire peut être exécuté lors du chargement du plugin, il n’est pas nécessaire qu’il s’agisse d’un rappel.


(@fhwebdesign)

il y a 2 ans, 9 mois

Déplacez votre appel d’action supplémentaire vers ‘wp_ajax_fhw_do_ajax_request’ vers une file d’attente d’appels de script externe. Les applications admin-ajax.php ne tentent pas de mettre les scripts en file d’attente. Votre appel d’action supplémentaire peut être exécuté lors du chargement du plugin, il n’est pas nécessaire qu’il s’agisse d’un rappel.

Autant que je sache, vous devriez utiliser ce code comme celui-ci

add_action( 'wp_enqueue_scripts', 'fhw_register_script' );
add_action( 'wp_ajax_fhw_do_ajax_request', 'fhw_do_ajax_request' );
function fhw_register_script() {
	wp_register_script( 'fhw_formular', plugins_url( '/js/formular.js', __FILE__ ), array( 'jquery' ) );
	
	wp_enqueue_script( 'fhw_formular' );
	
	wp_localize_script( 'fhw_formular', 'ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
	wp_enqueue_script( 'fhw_formular' );
}

Vous trouverez ci-dessous l’erreur 400 Bad Missing.


(@bcworkz)

il y a 2 ans, 9 mois

Oui, c’était mon secret. Mais j’ai raté un autre détail important. Modifiez une ligne jusqu’à présent :
add_action( 'wp_ajax_fhw_getTyp', 'fhw_do_ajax_request' );
La balise d’activité doit répondre aux données d’activité transmises par jQuery, et non à son nom de récupération.

Vous le savez probablement, mais il convient de noter qu’une connexion est requise pour que cette action fonctionne. Pour les utilisateurs qui ne sont pas connectés, la balise d’activité ‘wp_ajax_no_priv_fhw_getTyp’ serait ajoutée séparément.


(@fhwebdesign)

il y a 2 ans, 9 mois

Oui, c’était mon secret. Mais j’ai raté un autre détail important. Modifiez une ligne jusqu’à présent : add_action(‘wp_ajax_fhw_getTyp’, ‘fhw_do_ajax_request’); La balise d’activité doit répondre aux données d’activité transmises par jQuery, et non à son nom de récupération.

Vous le savez probablement, mais il convient de noter qu’une connexion est requise pour que cette action fonctionne. Pour les utilisateurs qui ne sont pas connectés, la balise d’activité ‘wp_ajax_no_priv_fhw_getTyp’ serait ajoutée séparément.

Bon j’ai fait comme ça :

add_action( 'wp_ajax_fhw_ladeMarke', 'fhw_do_ajax_request' );
add_action( 'wp_ajax_no_priv_fhw_ladeMarke', 'fhw_do_ajax_request' );

function fhw_register_script() {
	wp_register_script( 'fhw_formular', plugins_url( '/js/formular.js', __FILE__ ), array( 'jquery' ) );
	
	wp_enqueue_script( 'fhw_formular' );
	
	wp_localize_script( 'fhw_formular', 'ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
	wp_enqueue_script( 'fhw_formular' );
}

Mais cela ne fonctionne pas non plus, toujours la même erreur 400.


(@bcworkz)

il y a 2 ans, 9 mois

Je suppose que l’action d’ajout de wp_enqueue_scripts existe toujours pour fhw_register_script() quelque part. Et apparemment, votre valeur d’action jQuery est maintenant fhw_ladeMarke au lieu de fhw_getTyp comme dans le bouton affiché dans votre première réponse à Jacob ?

Assurons-nous que le rappel Ajax est appelé. Il devrait l’être si ce qui précède est vrai. Ajoutez quelque chose comme error_log('Notice: fhw_do_ajax_request() was called'); comme première ligne dans fhw_do_ajax_request(). Essayez puis vérifiez que le message apparaît dans le journal des erreurs. Qu’il soit là ou non, il nous indiquera dans quelle direction chercher les problèmes.


(@fhwebdesign)

il y a 2 ans, 9 mois

Je suppose que l’action d’ajout de wp_enqueue_scripts existe toujours pour fhw_register_script() quelque part.

Le script ci-dessus est le fichier principal du plugin complet.

Et apparemment, votre valeur d’action jQuery est maintenant fhw_ladeMarke au lieu de fhw_getTyp comme dans le bouton affiché dans votre première réponse à Jacob ?

Je viens de le renommer, mais dans tous les fichiers.

Assurons-nous que le rappel Ajax est appelé. Il devrait l’être si ce qui précède est vrai. Ajoutez quelque chose comme error_log(‘Notified: fhw_do_ajax_request()’); comme première ligne dans fhw_do_ajax_request(). Essayez puis vérifiez que le message apparaît dans le journal des erreurs. Qu’il soit là ou non, il nous indiquera dans quelle direction chercher les problèmes.

Ehm… devrais-je avoir une fonction fhw_do_ajax_request ? Ça devrait être? Comme dit, le script dans la réponse ci-dessus est l’intégralité de mes archives (sans parler). Oh, il y a aussi un plugin avec enqueue fhw_register_script().


(@bcworkz)

il y a 2 ans, 9 mois

Oui! Vous avez besoin de la fonction fhw_do_ajax_request() comme vous l’avez fait add_action( 'wp_ajax_fhw_ladeMarke', 'fhw_do_ajax_request' );
C’est la fonction qui gère le côté serveur d’application Ajax. Je ne sais pas ce qu’il faut pour terminer votre appel Ajax sur le serveur, mais cette fonctionnalité est essentielle pour que cela se produise.

quand tu fais

jQuery.post(ajax_object.ajax_url, data, function(response) {
		$(".ergebnis").html(response);
});

une application est MAIL à ajax_url, qui est le fichier admin-ajax.php. Ce fichier récupère la valeur de l’action (‘fhw_ladeMarke’) du tableau de données transmis et l’ajoute à ‘wp_ajax_’ pour la balise d’action qui a ajouté ‘fhw_do_ajax_request’. Le fichier admin-ajax.php est alors exécuté
do_action( 'wp_ajax_fhw_ladeMarke', 'fhw_do_ajax_request' );
appelant sa fonction fhw_do_ajax_request() pour gérer une requête Ajax. Remarquez le devant Fabriquer au lieu de Ajouter. Cela fait une grosse différence.

J’espère que cela à du sens. Il est essentiel de le comprendre pour qu’il fonctionne comme Ajax dans WP. Vous devez évaluer le processus jusqu’à ce qu’il ait vraiment un sens pour vous. Cela ne résoudra peut-être pas votre problème tout de suite, mais il est tout aussi important de résoudre des problèmes similaires à l’avenir. Si vous avez besoin d’éclaircissements sur un point, il suffit de demander. Je ferai de mon mieux pour vous aider à comprendre.


(@fhwebdesign)

il y a 2 ans, 9 mois

Et bien merci pour cette bonne explication ! L’erreur était que j’avais oublié d’inclure ladeMarke.php dans le fichier principal du plugin. Merci pour ton aide!


(@bcworkz)

il y a 2 ans, 9 mois

Ha! ces dépendances ! Je suis content que vous ayez localisé le problème.


(@ikirby)

il y a 2 ans, 6 mois

Merci! Vous avez sauvé ma journée !!! J’ai eu le même problème : une nouvelle version du plugin n’était pas incluse :)))))))))))))

Cela a-t-il résolu votre problème ?

Was this helpful?

0 / 0

Leave a Reply 0

Your email address will not be published. Required fields are marked *