Intereting Posts
Фрагментация страницы по неделям Дать дочерние категории одинаковый класс (родительская категория-slug) как родительский в списке меню? Постоянная ссылка на сообщение без использования функций WordPress Пользовательский шаблон шаблона сообщения Установить галерею 3 в подкаталоге WordPress Пользовательская таксономия – настраиваемая сортировка столбца Отключить подтверждение по электронной почте новый регистр bbPress последний Измененный и последний, последний вопрос! добавить span в wp_nav_menu виджет Загрузка изображений в неправильный каталог после перехода на многоуровневый Как добавить анонимную функцию в перехватывание WordPress, удалив create_function Удалите Google Fonts, которые (возможно) добавлены плагинами Можно ли использовать WordPress в качестве онлайн-портфолио для текстового контента? Какую тему я бы искал? wp_query по названию Откорректируйте заказ для возвращенных сообщений

Почему у меня нет доступа к данным «$ _POST» за пределами моего обратного вызова AJAX?

Я пытаюсь передать некоторые данные из Back-end в JavaScript . Дело в том, что когда я пытаюсь console.log() переменную, проходящую через wp_localize_script() она показывает мне на консоли структуру, с которой я ранее манипулировал, но без фактических данных, которые я извлек из формы.


PHP-код

 add_action( 'wp_ajax_origin', 'create_an_ajax_request_origin_form' ); add_action( 'wp_ajax_nopriv_origin', 'create_an_ajax_request_origin_form' ); function create_an_ajax_request_origin_form() { $fields = array( 'address' => wp_kses( sanitize_text_field( $_REQUEST[ 'origin' ][ 'address' ] ), array() ), 'number' => wp_kses( intval( absint( $_REQUEST[ 'origin' ][ 'number' ] ) ), array() ), 'address_two' => wp_kses( sanitize_text_field( $_REQUEST[ 'origin' ][ 'address_two' ] ), array() ), 'city' => wp_kses( sanitize_text_field( $_REQUEST[ 'origin' ][ 'city' ] ), array() ), ); $GLOBALS[ 'address_origin' ] = str_replace( array( 'Rua.', 'Rua', 'R.', 'R', 'Ru', 'Ru.', 'Ra', 'Ra.' ), array( '', '', '', '', '', '', '', '' ), $fields[ 'address' ] ) . ', ' . $fields[ 'number' ] . ' - ' . $fields[ 'city' ]; } create_an_ajax_request_origin_form(); $GLOBALS[ 'address' ] = $address_origin; 

Обратите внимание, что я создаю глобальную переменную, которая извлекает фактические данные (обрабатываемые), отправленные из моего запроса AJAX .

 add_action( 'wp_enqueue_scripts', 'enqueuing_script_for_origin_form' ); function enqueuing_script_for_origin_form() { wp_enqueue_script( 'origin_form', get_template_directory_uri() . '/js/sistema-de-entrega/origin-form.js', array( 'jquery' ), null, true ); wp_localize_script( 'origin_form', 'origin', array( 'admin_ajax' => admin_url( 'admin-ajax.php' ), 'address' => $GLOBALS[ 'address' ] ) ); } 

И я бы хотел использовать эту $GLOBALS[ 'address_origin' ] через весь мой код.

пример

Предположим, что у меня есть функция call validate_address() которая получает адрес, управляемый из create_an_ajax_request_origin_form() . Как я могу получить доступ к переменной адреса внутри этой функции ? А также через весь мой .php код?


Код JavaScript

 $.post( origin.admin_ajax, origin_data, function( response ) { console.log( origin.address, response ); } ); 

wp_localize_script() его через wp_localize_script() я хотел бы работать с origin.address так, как я хочу, внутри кода JavaScript .


Выход

, 0 –

И это то, что я должен был видеть из Консоли .

Мой адрес, 200 – Мой город

Мне кажется, проблема начинающего , но я действительно смущен и не могу заставить его работать правильно: /


Больше информации

Я забыл сказать, что если я var_dump() изнутри create_an_ajax_request_origin_form() я получаю адрес, который правильно обрабатывается с заполненными пробелами. Я хочу отфильтровать данные в Back-end, а затем передать его через wp_localize_script() и работать с ним так, как я хочу в JavaScript.

Solutions Collecting From Web of "Почему у меня нет доступа к данным «$ _POST» за пределами моего обратного вызова AJAX?"

Возможно, это подходящий ответ для вас!

В соответствии с этим вопросом более разумным ответом является использование wp_send_json() с (если только необходимо) wp_send_json_success() и wp_send_json_error() . Они вернут объект JSON обратно в запрос AJAX, и он автоматически die() для вас. Он будет выглядеть примерно так:

 add_action( 'wp_ajax_origin', 'create_an_ajax_request_origin_form' ); add_action( 'wp_ajax_nopriv_origin', 'create_an_ajax_request_origin_form' ); function create_an_ajax_request_origin_form() { $fields = array( 'address' => wp_kses( sanitize_text_field( $_POST[ 'origin' ][ 'address' ] ), array() ), 'number' => wp_kses( intval( absint( $_POST[ 'origin' ][ 'number' ] ) ), array() ), 'address_two' => wp_kses( sanitize_text_field( $_POST[ 'origin' ][ 'address_two' ] ), array() ), 'city' => wp_kses( sanitize_text_field( $_POST[ 'origin' ][ 'city' ] ), array() ), ); wp_send_json( $fields ); // there's no need to use die() function if you're using wp_send_json() } 

Если все будет работать правильно, теперь вы можете получить данные этих $fields из запроса AJAX , и это будет выглядеть примерно так:

 $.post( origin.admin_ajax, origin_data, function( response ) { console.log( response.city ); // this will print out the response sent by the Backend through the wp_send_json() function } ); 

Obs: Я изменил суперглобальную переменную $_REQUEST на $_POST , что, на мой взгляд, является наиболее подходящей задачей. Потому что мы используем метод $.post для отправки и получения данных между Frontend и Backend .

Ответ в реальном мире

До этого момента я не знал, что мне нужно расширить данные в Личную панель WordPress . Таким образом, единственным вариантом (в данном случае) было получить все, отфильтрованное create_an_ajax_request_origin_form() и сохранить его в $_COOKIE массиве $_COOKIE .

Я предпочел использовать JavaScript Cookie Repository для работы с Cookies в JavaScript , таким образом, стало понятно, почему я фактически использую Cookies.