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?


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.