Zum Inhalt

WordPress ajax Eorror 400 Bad Request

WordPress bieten für asynchrone Anfragen eine integrierte API. Der ajax-Call soll laut WordPress immer zu der vorgegebenen Datei /backendsection/admin-ajax.php geleitet werden. Dies dient nicht nur der Sicherheit, sondern auch der Kompatibilität von Plugins. Es sollte also vermieden werden eine eigene Datei zum Empfang der Daten bereitzustellen.

Hängt man allerdings in einem Problem fest, wo einem die admin-ajax.php stur immer 0 mit einem Header 400 Bad Request zurückgibt, kann man schon mal auf den Gedanken kommen, WordPress eigene Schnittstelle zu umgehen. Aber besser ist es immer dem Fehler auf die Schliche zu kommen. Leider gestaltet sich das Debuggen in diesem Fall recht schwierig, sofern es einem so geht wie mir letztens. Der Fehler war bei mir ein reines Timing-Problem. Da muss man aber erst mal drauf kommen.

Lösung: WordPress ajax Eorror 400 Bad Request

Wenn einem weder PHP-Fehler noch die Javascript-Console weiterhelfen, sollte man erstmal versuchen den Aufruf zu isolieren. Passe dazu folgende URL entsprechend an und rufe sie im Browser auf:

https://domain.com/backendsection/admin-ajax.php?action=usysto_request

Domain.com muss natürlich ersetzt werden und der Parameter action erhält als Wert den Namen der Funktion, die von WordPress nach erfolgtem Ajax-Request aufgerufen werden soll.

Beispiel:

// PHP
add_action("wp_ajax_usysto_request", "usysto_request");
add_action("wp_ajax_nopriv_usysto_request", "usysto_request");
function usysto_request(){
 echo ':test:';
 die();
}

Wichtig, der Name der Zielfunktion muss ebenfalls im Aufruf jQuery.ajax unter data:{action:"usysto_request"} notiert werden.

Ist alles richtig notiert und man bekommt beim Aufruf der oben genannten URL den Wert 0 zurück, dann liegt womöglich ein Timing-Problem vor. Wie in der admin-ajax.php zu sehen, wird geprüft ob eine Funktion mit unserem Namen und dem Präfix wp_ajax_ oder wp_ajax_nopriv_ existiert. Ist dem nicht so, dann wird ein http-Header 400 und der Wert 0 zurückgegeben. Also genau das was wir nun sehen.

Füge also den Codeabschnitt wie im Beispiel oben, etwas früher ein. Die Funktion muss bereits bekannt sein, sobald der Ajax-Aufruf erfolgt. Etwas testen hilft hier, falls man kein WordPress-Spezialist ist.

Veröffentlicht inLösungenTipp's

Schreibe den ersten Kommentar

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

    Neueste Beiträge

    Themen: