Dlaczego WordPress dodaje 0 (zero) do odpowiedzi Ajax?

16

O ile nie zakończę funkcji przetwarzania Ajax przez exit()lub die(), funkcja Ajax otrzymuje pożądane i prawidłowe dane wyjściowe, ale następuje po nich 0.

Wiesz, dlaczego tak się dzieje?

Czy to ma tak być, czy może być naprawione?

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

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

Czytałem w AJAX we wtyczkach , ale dlaczego jest to konieczne?

Radek
źródło
Czy to (dodanie 0) dzieje się nawet po wylogowaniu z wordpress?
murdaugh
Tak, nawet jeśli nie jestem zalogowany do WordPress.
Radek

Odpowiedzi:

31

Domyślną odpowiedzią admin-ajax.phpjest

die( '0' );

... dodając własne wp_die()lub exit()lubdie() po powrocie żądanej zawartości uniemożliwia odpowiedź domyślną z admin-ajax.phpzwracane, jak również.

Ogólnie oznacza to również, że wywołanie ajax zakończyło się powodzeniem.

Ostatecznie, aby odpowiedzieć na twoje pytanie, ma to działać w ten sposób. To, co robisz, wychodząc po zwróceniu treści, jest właściwe.

Adam
źródło
Dziękuję za wyjaśnienie. Więc czy używam die (), czy sprawdzam wewnątrz ajax dla 0, żeby wiedzieć, że wszystko jest w porządku?
Radek
2
Użyj die()lub exit()po odtworzeniu echa treści / danych. W success/completefunkcji wywołania zwrotnego metody ajax możesz następnie manipulować danymi i użyć ich do wypełnienia DOM. Możesz także wykonać dodatkowe sprawdzenie błędów, aby sprawdzić integralność danych. Możesz również sprawdzić błędy w funkcji zwrotnej PHP przed wyjściem. Zasadniczo wyjście po zwróceniu twojej odpowiedzi sprawi, że nie zgodzisz się 0z nią. Nawiasem mówiąc, tylko dlatego, że otrzymasz 0odpowiedź, nie oznacza, że ​​Twoje wywołanie ajax zakończyło się powodzeniem w 100%. Łatwo jest jednak stwierdzić, kiedy sprawdzasz wyniki.
Adam
1
Powinieneś używać wp_die()dodanego w wersji 2.0.4
kod emocji
@ kod Thrill, chyba że musisz ujawnić proces wp_dieinnym wtyczkom lub kodowi motywu, który może się przyczepić do tego procesu, wtedy użycie dielub exitjest w porządku. Jeśli masz zamiar wydać swój kod jako OSS lub w inny sposób, w którym Twój kod musi się ładnie bawić z innymi, wp_diebyłoby to bardziej korzystne, uzgodnione.
Adam,