san_jorich
@san_jorich
Творческий кодер

Что с ajax post запросом в Wordpress?

В 100500ый раз пишу ajax post запрос, и вдруг в PHP притопал NULL. Как так-то 0-о?
add_action( 'wp_ajax_get_estate_by_proprietor_phone','get_estate_by_proprietor_phone' );
add_action( 'wp_ajax_nopriv_get_estate_by_proprietor_phone','get_estate_by_proprietor_phone' );

function get_estate_by_proprietor_phone(){
/* test mode */
    $phone_number = json_decode(stripslashes($_POST['phone_number']),true); // Сейчас так
    /* Было и так:
                   $phone_number = json_decode($_POST['phone_number']),true);
        И так:
                    $phone_number = json_decode($_POST['phone_number']);

         И даже так:
                    $post_ph = $_POST['phone_number'];
                    $phone_number = json_decode($post_ph); // А вдруг нельзя все сразу в строку писать ))))) Все step-by-step
Вобщем как только не было уже - не пашет оно */
 
    wp_send_json($phone_number); // <- <- <- NULL
}

На jQuery не грешите - там все порядочно. Но консоль в ответ лишь NULLит
var phone_number = this.value; console.log(phone_number);	// Номер есть    			    		
	    		jQuery.ajax({
		          type:"POST",
		          url: ajaxurl,
		          dataType: "json",
		          data: { action: "get_estate_by_proprietor_phone", phone_number : phone_number},
		          success: function( estate_data ) { console.log(estate_data); /* Чудеса - номер пропадает. */}
		        });

Номер в формате +7-999-999-9999... я уже не знаю что думать - может он его вычисляет и не принимает\передает отрицательные значения?
Что не так с этим кодом ?)
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
san_jorich
@san_jorich Автор вопроса
Творческий кодер
По итогам бессоной ночи:
1) Wordpress требует локализации вашего скрипта. Его нужно "подружить" с admin-ajax.php
wp_register_script('js_function_id', plugins_url('functions_js/js_function.js', __FILE__));
wp_enqueue_script('js_function_id');
wp_localize_script( 'js_function_id', 'ajaxurl', admin_url( 'admin-ajax.php' ) );

2) На сколько я понял в Wordpress не нужно декодировать json. Во всяком случае у меня в php-обработке сработало просто присвоение POST переменной
$my_var = $_POST['my_var'] // без всяких json_decode, stripslashes и т.д.

3) Следите за выходным массивом. За его сбором - здесь тоже "уходит внимание". Если вы пишите одномерный массив то array_push(array, value) вполне подойдет. Но если выходит многомерная хрень с кучей ассоциативных данных (как было у меня) то с array_push в js приходят NULL. Я сформировал массив иначе:
$data = ['surname' => $surname, 'name' => $name, 'patronymic' => $patronymic]; // и так далее

4) Word_сука_press игнорирует echo json_decode($data); Для отправки ответа существут
wp_send_json($data);
И еще.. не забывайте про wp_die();

Надеюсь мои грабли будут для кого-то полезными, чтобы не наступать на них вновь )
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы