У меня есть выпадающий список страниц WordPress с классом 'page_id' (они повторяются и могут быть добавлены .. отсюда и живой запрос). в случае изменения я хочу отправить ajax-запрос, чтобы вытащить заголовок, выдержку и эскиз для выбранной страницы. на данный момент я просто пытаюсь получить ЛЮБОЙ вид действительного ответа JSON. я использую json_encode в моем обратном вызове, чтобы вернуть объект json обратно в мою функцию .ajax. и затем в функции успеха .ajax я пытаюсь разобрать этот объект json во что-то пригодное для использования, но вместо этого каждый раз получаю ошибку.
ошибка, похоже, проблема с JSON.parse:
JSON.parse
success(response="{"title":"bacon title","message":"bacon text"}0")
handleError(a=Object { url="http://localhost/single/wp-admin/admin-ajax.php", global=true, more...}, b=XMLHttpRequest { onreadystatechange=[xpconnect wrapped nsIDOMEventListener], readyState=4, more...}, d="success", e="{"title":"bacon title","message":"bacon text"}0") onreadystatechange(m=readystatechange )
[Break On This Error] var json = JSON.parse(response);
консоль firebug говорит, что ответ выглядит так:
{"title":"bacon title","message":"bacon text"}0
Я не знаю, является ли этот лишний 0 источником проблем, но я также не знаю, как оно там получается. Chrome сообщает об ошибке как:
Uncaught SyntaxError: Unexpected number
$.livequery.$.change.$.ajax.success/single/wp-admin/post.php?post=2&action=edit&message=1:917
вот моя функция jquery:
<script type="text/javascript">
//<![CDATA[
jQuery(function($) {
$('.page_id').livequery(function(){
var loading = $(this).next('img.ajax-loader');
$(this).change( function() {
var value = $(this).val();
if (value.length) {
$(loading).fadeIn();
var data = {
action: 'featured_meta_action',
data: value,
security: '<?php echo wp_create_nonce('featured-ajax-nonce'); ?>',
};
$.ajax({
type: "POST",
data: data,
url: ajaxurl,
complete: function(){
$(loading).fadeOut();
},
success: function(response){
var str = '{ "title": "bar" }';
var json = JSON.parse(response);
alert(json['title']);
},
error: function(){
alert('fail');
}
});
}//end if
}); //end change
}); //end livequery
}); //end ready
/* ]]> */
</script>
мой php callback выглядит так:
function featured_meta_action_callback(){
$responseVar = array(
'title'=>'bacon title',
'message'=>'bacon text',
);
echo json_encode($responseVar);
}
add_action('wp_ajax_featured_meta_action', 'featured_meta_action_callback');
это оказалось намного сложнее, чем кажется. Мне просто нужно получить данные обратно из функции PHP, чтобы я мог использовать их в JQuery. куда я иду не так?