使用 wordpress 处理 ajax 请求响应

Handling ajax request response with wordpress

本文关键字:请求 响应 ajax 处理 wordpress 使用      更新时间:2023-09-26

我已经在我的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;
   }

我的问题是,当请求完成时,控制台屏幕的响应选项卡上没有任何内容。怎么会这样?

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部分。

确保已按如下方式对自定义脚本进行排队。如果你的脚本在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');