Я пишу плагин, который использует Ajax (jQuery с плагином формы) через отправку формы, а функция php возвращает ответ JSON.
add_action( 'wp_ajax_bubbly-upload', 'bubbly_upload_submit' );
function bubbly_upload_submit() {
// generate the response
$response = json_encode( array( 'success' => true ) );
// response output
header( "Content-Type: application/json" );
echo $response;
}
В Firefox ни один из обработчиков ответов jQuery не срабатывал, и диалоговое окно сохранения файла открывалось с ответом JSON. У меня не было бы проблемы, если бы я вернул HTML. Однако в любом случае в конце моего ответа был добавлен «0». После некоторого копания оказалось, что jQuery не будет запускать обработчик, если ответ JSON недействителен. Этот «0», добавляемый в конец, делает JSON недействительным.
Если я смотрю в admin-ajax.php
код, я вижу это:
default :
do_action( 'wp_ajax_' . $_POST['action'] );
die('0');
break;
endswitch;
Документы php для die говорят, что если переданный параметр является строкой, то он будет напечатан непосредственно перед выходом, если это целое число, он не будет напечатан.
Есть ли способ избежать этой проблемы без взлома ядра и по-прежнему использовать JSON? Кроме того, это ошибка, потому что я не понимаю, как было бы желательно добавлять ноль в конец каждого ответа AJAX…
Поместите
die();
в свою функцию:Ссылка: Кодекс WordPress, AJAX в плагинах
Спасибо! Я должен был прочитать кодекс более внимательно… Я смотрю на эту страницу уже несколько дней.
Добро пожаловать!… Если вы продолжите посещать кодекс каждый день, вы в конечном итоге запомните множество URL-адресов страниц, подобных этой. 🙂