JSON.parse в Wordpress Backend возвращает ошибку - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть выпадающий список страниц 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. куда я иду не так?

1 Ответ

1 голос
/ 15 февраля 2011

Я думаю, что это может быть так:

function featured_meta_action_callback(){

    $responseVar = array(
                    'title'=>'bacon title',
                    'message'=>'bacon text' // <<< Here you do not need another comma
                    );

    echo json_encode($responseVar); 

}

См. Комментарий в массиве.

РЕДАКТИРОВАТЬ: Хотя это и не нужно, в тесте он не выводит 0 в конце объекта JSON, если я оставлю его там. Таким образом, вероятно, что это происходит откуда-то еще (другими словами, код WordPress).

EDIT v2: Запустите их через консоль Firebug. Второй выдает ошибку, но если вы не включите 0, он работает просто отлично.

console.log(JSON.parse('{"title":"bacon title","message":"bacon text"}'));
console.log(JSON.parse('{"title":"bacon title","message":"bacon text"}0'));

EDIT v3: Хорошо, очевидно, вам необходимо замкнуть остальную часть процесса WP, вызвав exit / die в конце функции, например:

function featured_meta_action_callback(){

    $responseVar = array(
                    'title'=>'bacon title',
                    'message'=>'bacon text' // <<< Here you do not need another comma
                    );

    echo json_encode($responseVar); 

    exit;
}

Предлагаемый здесь:

http://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Administration_Side

А здесь:

http://amiworks.co.in/talk/simplified-ajax-for-wordpress-plugin-developers-using-jquery/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...