homeandriy
@homeandriy
Песисмист

Почему Wordpress после Ajax запроса возвращает 0?

Есть Ajax запрос на WP

javascript
$('input[name="author"]').blur(function(e) {
            $('#result').text('');
           action = 'ajax_seach',
           param = $('input[name="author"]').val();

           $.ajax({
             url: php_array.admin_ajax,
             type:'POST',
             data: ({
               'action': action,
               'nonce' : php_array.nonce,
               'var': param,

             }),             
             beforeSend: function () {
                           
            },
             success: function (data, textStatus, jqXHR) {
                $('#result').append('');
                console.log(data);
                $( '#container_for_post' ).html('');
                $('#myModal').modal('show'); 
                                       
                $( '#container_for_post' ).append( data ); 
            },
             error: function (jqXHR, textStatus, errorThrown) {
              console.log(jqXHR + " :: " + textStatus + " :: " + errorThrown);
             }
           });
        });


код срабатывает на поле формы

и есть php часть

function ajax_seach_super () {
	$nonce = $_POST['nonce'];
	if ( !wp_verify_nonce( $nonce, 'myajax-nonce' ) )
		
			die ( 'Fuck!!!!!');

	 $name = (isset($_REQUEST['var'])) ? $_REQUEST['var'] : 'something_if_not';
   	
		  
		   	   			
		   			$query = new WP_Query('page_id=337');
		   			while ( $query->have_posts() ) {
		   				$query->the_post();
		   				the_title(); // выведем заголовок поста
		   			}
		   		
		   		
?>
		   		<h1><?php  echo 'Привет '.$name; ?></h1>
		  <?php
		       wp_die();		   
    }


add_action('wp_ajax_ajax_seach', 'ajax_seach_super'); 
add_action('wp_ajax_nopriv_ajax_seach', 'ajax_seach_super');


перед ним есть код типа
/** Register Scripts. */
add_action('wp_enqueue_scripts', 'theme_register_scripts', 1);
function theme_register_scripts() {

	/** Register JavaScript Functions File */
	wp_register_script('functions-js', esc_url(trailingslashit(get_template_directory_uri()) . 'functions.js'), array('jquery'), '1.0', true);

	/** Localize Scripts */
	$php_array = array(
		'admin_ajax' => admin_url('admin-ajax.php'),
		'nonce' => wp_create_nonce('myajax-nonce'),
		);
	wp_localize_script('functions-js', 'php_array', $php_array);

}

/** Enqueue Scripts. */
add_action('wp_enqueue_scripts', 'theme_enqueue_scripts');
function theme_enqueue_scripts() {

	/** Enqueue JavaScript Functions File */
	wp_enqueue_script('functions-js');

}

/** Ajax Post */
add_action('wp_ajax_theme_post_example', 'theme_post_example_init');
add_action('wp_ajax_nopriv_theme_post_example', 'theme_post_example_init');
function theme_post_example_init() {

	/** Made Query */
	$args = array('p' => $_POST['id']);
	$theme_post_query = new WP_Query($args);
	while ($theme_post_query->have_posts()): $theme_post_query->the_post();
		?>
    <div class="modal-header">
 	  <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
 	  <h4 class="modal-title" id="myModalLabel"><?php the_title();?></h4>
 	</div>
 	<div  class="modal-body"  >
				<?php the_content();?>
 	</div>
 	<div class="modal-footer">
 	  <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
 	  <a href="<?php the_permalink();?> " type="button" class="btn btn-primary">Читать полностью</a>
 	</div>
														  <?php
endwhile;
	exit;
}


После того как срабатывает форма, отправляется ajax запрос, проходит nonce, получает передаваемый параметр, а от функции WP абсолютно не работают. Кода я получаю ответ, то передаваемый мною параметр выводится, а от все остальное нет и ВСЕГДА в конце стоит "0". Убирается он когда в конце пишу стоку wp_die()

Также в кодексе нашел строки типа



If the Ajax request fails in wp-admin/admin-ajax.php, the response will be -1 or 0, depending on the reason for the failure. Additionally, if the request succeeds, but the Ajax action does not match a WordPress hook defined with add_action('wp_ajax_(action)', ...) or add_action('wp_ajax_nopriv_(action)', ...), then admin-ajax.php will respond 0.


но не описывается когда 0 а когда -1 и как это толком решить.

Есть ли решения данной проблемы?
  • Вопрос задан
  • 1434 просмотра
Пригласить эксперта
Ответы на вопрос 2
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
У вас проверка nonce не проходит, потому что путаница с названиями переменных - и my_ajax, и php_array и тд. Почитайте документацию или вот тут.
Ответ написан
Комментировать
homeandriy
@homeandriy Автор вопроса
Песисмист
я все равно не пойму где путаница, ведь
action = 'ajax_seach'
и
wp_ajax_ajax_seach', 'ajax_seach_super
add_action('wp_ajax_nopriv_ajax_seach', 'ajax_seach_super');

имена сходятся..... что не так?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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