1

WordPressプラグインでajaxリクエストを実行しました。リクエストは以下の手順に基づいています。

1)jsファイルを含め、準備ができたらリクエストドキュメントを開始します

2)php側では、このリクエストを受け取り、印刷してテストしたいと思います。

これらすべてのもののために、私はこれらのコードを書きました:

main.js:

 $(function(){      
    $.post('/wp-content/plugins/dsn/functions.php',{token:"1tibu4"},function(data) {
      console.log(data);
    },"json");
 });

Functions.php:

 <?php 

   add_action('loop_end', 'init');

   function init(){
       global $_POST;

       $post= $_POST;   
       echo json_encode($post);Exit;

   }

私の質問は、リクエストが完了すると、コンソール画面の応答タブに何も表示されないということですが、どうしてこれが発生するのですか?

4

2 に答える 2

4

WordPressにはAJAXを処理する独自の方法があります。phpファイルに直接リクエストを行うと、WordPressフレームワークの残りの部分が読み込まれず、WordPress固有の機能の多くが利用できなくなります。

PHP側では、次のようなコードを使用する必要があります。

//for logged in users
add_action('wp_ajax_my_action', 'my_action_callback');
//for not logged in users
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');

function my_action_callback() {
  //your function here
  exit; //always call exit at the end of a WordPress ajax function
}

JS側では、「wp-admin/admin-ajax.php」というファイルにリクエストを送信する必要があります

したがって、リクエストは次のようになります(jQueryを使用)。

$.ajax({
    url : '/wp-admin/admin-ajax.php',
    type : 'get', //or 'post'
    data : {
                action: 'my_action_callback'
            }
})
     .fail(function(r,status,jqXHR) {
         console.log('failed');
     });
     .done(function(r,status,jqXHR) {
        console.log('success');
     });

my_action_callbackの部分に注意してください。

于 2013-01-25T12:11:05.507 に答える
1

次のようにカスタムスクリプトをキューに入れたことを確認してください。Wordpress jQueryスクリプトがカスタムインジェクトされる前にスクリプトが含まれていると、コードが正しく機能しない可能性があります。

function my_scripts_method() {
    wp_enqueue_script(
        'custom-script',
        get_template_directory_uri() . '/js/main.js',
        array('jquery')
    );
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
于 2013-01-25T12:27:05.710 に答える