Я определил функцию обратного вызова 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
.
Обычно вы можете использовать глобальную переменную 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()
.