1

我在我的 wordpress 插件中完成了一个 ajax 请求。我的请求基于以下步骤:

1)我正在包括js文件并准备好开始请求文档

2)在php方面,我想接受这个请求并将其打印出来进行测试。

对于所有这些东西,我写了这些代码:

主.js:

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

函数.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 回答