web-dev-qa-db-ja.com

クリックで投稿ごとにコメントを読み込む AJAX

私はスライダーを使ってブログ記事を表示するテーマに取り組んでいます。スライダーの下には、ページ番号ではなく日付がタイムラインのように表示され、対応するブログ投稿を呼び出すページ付けがあります。各投稿のコメントをスライダーの外側に表示します。それで、私は私のヘッダーにこのコードを持っています、ajaxでコメントを得るために:

:: EDITED(現在はwp-admin/admin-ajax.phpを使用してリクエストを処理しています、以下のアドバイスを参照)::

$(".timeline-entry a").live('click', function(event) {
  event.preventDefault();
  $.ajax({
     url: '<?php echo admin_url('admin-ajax.php'); ?>',
     type: 'POST',
     action: 'do_ajax',
     data: {
        'post_id' : '72' //using a post id that I *know* has comments, for testing!
     },
     dataType: "json",
     success: function(myResult) {
        alert(myResult);
     },
     error: function(error) {
        alert(error);
     }
  });
});

私のfunctions.php:

add_action('wp_ajax_nopriv_do_ajax', 'retrieve_comments');
add_action('wp_ajax_do_ajax', 'retrieve_comments');

function retrieve_comments(){      
    $myPost = $_REQUEST['post_id'];
    $output = get_comments('post_id=' + $myPost);
    $output = json_encode($output);          
    if(is_array($output)){         
        print_r($output);             
    }          
    else{         
        echo $output;          
    }          
    die;
}; 

アラートボックスに0が表示されます。つまり、これはajaxが発生していることを意味しますが、私のphp関数には問題がありますね。

ご協力いただきありがとうございます。

2
Amal

ああ、私は私の構文が間違っていたと思います。

私が変更され:

 action: 'do_ajax',
 data: {
    'post_id' : '72' //using a post id that I *know* has comments, for testing!
 },

に:

data: {
    'action' : 'do_ajax',
    'post_id' : '72'
},

そしてconsole.logから正しい応答を得ています。

[{"comment_ID":"1","comment_post_ID":"1","comment_author":"Mr WordPress","comment_author_email":"","comment_author_url":"http:\/\/wordpress.org\/","comment_author_IP":"","comment_date":"2012-08-28 19:55:20","comment_date_gmt":"2012-08-28 19:55:20","comment_content":"Hi, this is a comment.<br \/>To delete a comment, just log in and view the post&#039;s comments. There you will have the option to edit or delete them.","comment_karma":"0","comment_approved":"1","comment_agent":"","comment_type":"","comment_parent":"0","user_id":"0"},{"comment_ID":"2","comment_post_ID":"72","comment_author":"Mr WordPress","comment_author_email":"","comment_author_url":"http:\/\/wordpress.org\/","comment_author_IP":"","comment_date":"2010-07-11 12:10:08","comment_date_gmt":"2010-07-11 12:10:08","comment_content":"Hi, this is a comment.<br \/>To delete a comment, just log in and view the post&#039;s comments. There you will have the option to edit or delete them.","comment_karma":"0","comment_approved":"1","comment_agent":"","comment_type":"","comment_parent":"0","user_id":"0"}

だから今私は配列を処理するための最良の方法を考え出している:)

3
Amal

あなたのPHPファイルはWordPress環境のコンテキストでロードされていないので、WordPressの機能にアクセスすることはできません。 WordPressでAJAX呼び出しを処理する適切な方法、特に については、CodexのプラグインAJAXをご覧ください。 )視聴者側のAjax 。ページのタイトルにもかかわらず、これはAJAXがテーマでどのように扱われるべきかということでもあります。

EDIT - これはWordPress AJAX機能を理解するための良いチュートリアル (上記のCodexページの下部にリンクされています)です。 。

0
Milo