Почему WordPress добавляет 0 (ноль) к Ajax-ответу?
Если я не завершаю функцию обработки 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 в Плагинах, но почему это необходимо?

Стандартный ответ от admin-ajax.php
это:
die( '0' );
...добавляя свой собственный wp_die()
, exit()
или die()
после возврата желаемого контента, вы предотвращаете возврат стандартного ответа от admin-ajax.php
.
Это также обычно означает, что ваш AJAX-запрос выполнен успешно.
В итоге, отвечая на ваш вопрос, так и должно работать. То, что вы делаете, завершая выполнение после возврата контента — это правильный подход.

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

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

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