Ajax вернет правильные данные, но в неправильном месте

Я пытаюсь понять, как правильно использовать AJAX с WordPress: (я использовал его на других сайтах, но не в WP)

У меня этот код в functions.php темы:

function jquery_stuff() { wp_enqueue_script('jquery'); wp_enqueue_script('scriptname', get_bloginfo('template_url') . '/wibergsweb.js'); } add_action( 'init', 'jquery_stuff'); //AJAX add_action('wp_ajax_locationContent', 'locationContent'); function locationContent() { echo 'batman returns'; die(); } 

и вот что выглядит jQuery:

 function loadLocationInfo(clickedOn) { var locationId = clickedOn.next().attr('id'); var locationContent = $.ajax({ type: 'POST', data:{ action: 'locationContent', location_id: locationId }, url: "/wp-admin/admin-ajax.php", dataType: 'json' }); locationContent.done(function(data) { alert('DONE'); }); locationContent.fail(function(ts) { alert('ERROR'); clickedOn.next('.location-info').html(ts.responseText); $('body').css('cursor', 'pointer'); clickedOn.css('cursor', 'pointer'); }); } $(document).on('click', 'h3', function(e) { var tClicked = $(this); loadLocationInfo(tClicked); }); 

Почему фактический ответ возвращается в fail -функции? (Да, данные верны, это странная часть).

Вот что происходит:

 1. ERROR is shown in alert-dialog. 2. The .location-info div is set to 'batman returns' 

Если у меня нет die () в php, как это:

 function locationContent() { echo 'batman returns'; } 

Затем возвращается 0, НО возвращается 0 в done() -функции (неверные данные возвращаются в ожидаемом месте)

Почему фактический ответ возвращается в функции fail-функции и как я могу решить эту проблему? (Я не могу понять, что здесь происходит)

Solutions Collecting From Web of "Ajax вернет правильные данные, но в неправильном месте"

Вы указываете тип данных, возвращаемый из вызова AJAX, чтобы быть JSON. Однако строка, которую вы возвращаете («batman начинает»), не находится в формате JSON. Таким образом, jQuery ajax-call завершится с ошибкой. Попробуйте передать данные как JSON с помощью json_encode :

 function locationContent() { echo json_encode( 'batman returns' ); die(); } 

Это исправит вашу проблему.

Кроме того, я могу посоветовать вам префикс ваших функций и придерживаться стандартов кодирования PHP WordPress (например, myplugin_locationcontent вместо locationContent ).