Warum fügt WordPress einer Ajax-Antwort 0 (Null) hinzu?

16

Sofern ich die Ajax-Verarbeitungsfunktion nicht mit exit()oder die()beende, erhält die Ajax-Funktion die gewünschte und korrekte Ausgabe, folgt jedoch mit 0.

Irgendeine Idee, warum das passiert?

Soll das so sein oder könnte es behoben werden?

add_action('wp_ajax_get_homepage', 'get_homepage');
add_action('wp_ajax_nopriv_get_homepage', 'get_homepage');

function get_homepage(){
    echo "get_homepage ->";
    exit();
}

Ich habe bei AJAX in Plugins gelesen , aber warum ist das notwendig?

Radek
quelle
Kommt es vor (das Hinzufügen von 0), auch wenn Sie von WordPress abgemeldet sind?
Murdaugh
Ja, auch wenn ich nicht bei WordPress angemeldet bin.
Radek

Antworten:

31

Die Standardantwort von admin-ajax.phplautet:

die( '0' );

... durch Hinzufügen Ihres eigenen wp_die()oder exit()oder die()nach der Rücksendung Ihres gewünschten Inhalts wird verhindert, dass die Standardantwort ebenfalls admin-ajax.phpzurückgesendet wird.

Dies bedeutet im Allgemeinen auch, dass Ihr Ajax-Anruf erfolgreich war.

Um Ihre Frage zu beantworten, sollte es letztendlich so funktionieren. Was Sie tun, indem Sie nach der Rückgabe Ihrer Inhalte beenden, ist das Richtige.

Adam
quelle
Vielen Dank für die Erklärung. Benutze ich also die () oder überprüfe ich in Ajax auf 0, um zu wissen, dass alles in Ordnung war?
Radek
2
Verwenden Sie die()oder exit()nachdem Sie Ihre Inhalte / Daten wiedergegeben haben. In der success/completeRückruffunktion Ihrer Ajax-Methode können Sie dann die Daten bearbeiten und zum Auffüllen des DOM verwenden. Sie können auch zusätzliche Fehlerprüfungen durchführen, um die Datenintegrität zu überprüfen. Sie können auch vor der Ausgabe in Ihrer PHP-Callback-Funktion eine Fehlerprüfung durchführen. Wenn Sie nach dem Zurücksenden Ihrer Antwort im Wesentlichen beenden, stellen Sie sicher, dass Sie nicht auch damit 0einverstanden sind. Nur weil Sie eine 0Antwort erhalten, heißt das übrigens nicht, dass Ihr Ajax-Anruf zu 100% erfolgreich war. Es ist jedoch leicht zu erkennen, wann Sie Ihre Ausgabe überprüfen.
Adam
1
Sie sollten wp_die()in 2.0.4 hinzugefügt werden
Thrillcode
@thrillcode, es sei denn, Sie müssen den Prozess wp_dieanderen Plugins oder Themencodes aussetzen, die sich in den Prozess einbinden können. Dann ist die Verwendung von dieoder exitin Ordnung. Wenn Sie beabsichtigen, Ihren Code als OSS oder auf andere Weise freizugeben, wo Ihr Code mit anderen gut spielen muss, dann wp_diewäre es vorzuziehen, zugestimmt.
Adam