Как использовать JSON с AJAX?

Я определил функцию обратного вызова PHP для обработки связи между серверной и клиентской стороной:

function json_render_modal_body() { check_ajax_referer( THEME_PREFIX . '-modals', 'nonce' ); $response = array( 'text' => 'no' ); $modal_id = null; if ( isset( $_GET['modal_id'] ) && ! $modal_id = filter_var( $_GET['modal_id'], FILTER_SANITIZE_STRING ) ) { wp_send_json_error( $response ); } if ( ! $form = render_form( $modal_id ) ) { wp_send_json_error( $response ); } $response['text'] = 'yes'; wp_send_json_success( $response ); } 

Я сказал WordPress об этой функции, чтобы обработать процесс связи:

 add_action( 'wp_ajax_json_render_modal_body', __NAMESPACE__ . '\json_render_modal_body' ); add_action( 'wp_ajax_nopriv_json_render_modal_body', __NAMESPACE__ . '\json_render_modal_body' ); 

Я зарегистрировал / выставил / локализовал свой JS-скрипт для обработки запроса AJAX.

Это то, что я локализовал:

 wp_localize_script( THEME_PREFIX . '-modals', 'mbe_theme_modal', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( THEME_PREFIX . '-modals' ) ) ); 

Вот как выглядит мой сценарий JS:

 var modal_id = jQuery( e.relatedTarget ).attr( "data-target" ).replace( "#", "" ); jQuery.get( mbe_theme_modal.ajax_url, { action: "json_render_modal_body", modal_id: modal_id, nonce: mbe_theme_modal.nonce }, function ( data ) { console.log( data ); }, 'json' ); 

Любая идея, почему я продолжаю получать 0 в ответе AJAX?

Я также попытался удалить ненужные вещи из своего кода и получить доступ к прямому URL ( domain.com/wp-admin/admin-ajax.php?action=json_render_modal_body&modal_id=some-modal-id , однако, я все еще продолжаю получать a 0 .

Я даже пытался сохранить функцию PHP супер простой, ничего, кроме простого текстового ответа, и по-прежнему получать 0 .

Solutions Collecting From Web of "Как использовать JSON с AJAX?"

Обычно вы можете использовать глобальную переменную ajaxurl вместо любого пути, используя admin-ajax.php .

Что еще более важно, функция PHP должна wp_die() ответ перед вызовом wp_die() . Поскольку вы не вызывали wp_die() , AJAX, вероятно, ждет больше от PHP.

Надеюсь это поможет.

PS Что это 'json' строка 'json' , где должна быть функция AJAX fail ()?

Когда вы используете Ajax в WP, вы должны использовать post вместо того, чтобы отправлять данные в admin-ajax.php . Ознакомьтесь с https://developer.wordpress.org/plugins/javascript/ajax/#json для получения подробной информации о том, что и как отправлять ваши данные, но начните с изменения вашего запроса на использование jQuery.post() .