Почему WordPress добавляет 0 (ноль) к Ajax-ответу?

4 окт. 2013 г., 14:58:44
Просмотры: 18K
Голосов: 22

Если я не завершаю функцию обработки Ajax с помощью exit() или die(), Ajax-функция получает правильный ожидаемый вывод, но с добавленным нулём 0 в конце.

Есть идеи почему так происходит?

Это ожидаемое поведение или это можно исправить?

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

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

Я читал в AJAX в Плагинах, но почему это необходимо?

2
Комментарии

Происходит ли это (добавление 0) даже если вы вышли из WordPress?

murdaugh murdaugh
4 окт. 2013 г. 15:06:31

Да, даже если я не авторизован в WordPress.

Radek Radek
4 окт. 2013 г. 15:14:56
Все ответы на вопрос 1
4
40

Стандартный ответ от admin-ajax.php это:

die( '0' );

...добавляя свой собственный wp_die(), exit() или die() после возврата желаемого контента, вы предотвращаете возврат стандартного ответа от admin-ajax.php.

Это также обычно означает, что ваш AJAX-запрос выполнен успешно.

В итоге, отвечая на ваш вопрос, так и должно работать. То, что вы делаете, завершая выполнение после возврата контента — это правильный подход.

4 окт. 2013 г. 15:43:29
Комментарии

Спасибо за объяснение. Так я должен использовать die() или проверять внутри ajax на 0, чтобы узнать, что все прошло успешно?

Radek Radek
5 окт. 2013 г. 04:12:49

Используйте die() или exit() после вывода вашего контента/данных. В функции обратного вызова success/complete вашего ajax-метода вы затем можете обрабатывать данные и использовать их для заполнения DOM. Вы также можете выполнить дополнительную проверку ошибок для валидации целостности данных. Проверку ошибок можно делать и в PHP-функции обратного вызова перед выводом. По сути, выход после возврата ответа гарантирует, что вы не получите также 0 вместе с ним. Кстати, просто потому что вы получили ответ 0, это не значит, что ваш ajax-запрос был на 100% успешным. Однако это легко определить при проверке вывода.

Adam Adam
5 окт. 2013 г. 04:26:35

Вам следует использовать wp_die(), добавленный в версии 2.0.4

thrillcode thrillcode
28 апр. 2018 г. 07:31:17

@thrillcode если вам не нужно раскрывать процесс wp_die для других плагинов или кода темы, которые могут подключаться к этому процессу, тогда использование die или exit допустимо. Если вы планируете выпускать свой код как открытое ПО или в других случаях, когда ваш код должен корректно работать с другими, тогда wp_die будет более предпочтительным, согласен.

Adam Adam
29 апр. 2018 г. 11:12:25