Javascript 如何在wordpress中从ajax调用php函数?

Javascript 如何在wordpress中从ajax调用php函数?,javascript,php,html,jquery,Javascript,Php,Html,Jquery,我是wordpress新手,我需要从ajax调用php函数,但我的代码不起作用。我在wordpress上读到了关于ajax标准的文章,但我不知道会发生什么,我在本博客中阅读了一些教程和答案,它们都讨论了将javascript文件排队的操作,但问题仍然存在,我不知道我做错了什么。若要继续,请共享我的代码 这是我将javascript文件排队的函数: function enqueue_script() { $ajax_script = 'popup'; $uri = get_styl

我是wordpress新手,我需要从ajax调用php函数,但我的代码不起作用。我在wordpress上读到了关于ajax标准的文章,但我不知道会发生什么,我在本博客中阅读了一些教程和答案,它们都讨论了将javascript文件排队的操作,但问题仍然存在,我不知道我做错了什么。若要继续,请共享我的代码

这是我将javascript文件排队的函数:

function enqueue_script() {
    $ajax_script = 'popup';
    $uri = get_stylesheet_directory_uri() . '/assets/front/js/popup.js';
    wp_register_script($ajax_script, $uri);
    wp_localize_script( $ajax_script, 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
    wp_enqueue_script( $ajax_script, $uri, array('jquery'), rand(111,9999), 'all');
}
add_action( 'wp_enqueue_scripts', 'enqueue_script' );
我要调用的php函数,位于update_request_status.php文件中:

function update_status(){
    echo "<script>alert('I am update function!!!!');</script>";
}
最后,这是我的模式,按钮触发调用php函数的操作:

<div class="warning-msg" id="msg-remove-request">
  <button class="btn-close"  id="btn-close">&times;</button>
  <h5>¿Dar por concluida esta solicitud ? </h5><hr>
  <?php echo  fix_request()?>
  <div class="confirm-btns">
    <button class="btn-confirm">Aceptar</button>
    <button class="btn-close">Cancelar</button>
  </div>
  <div class='update-status'></div>
</div>

&时代;
你的结论是什么
接受器 取消者

有人能帮我吗?

有多种方法。首先,我会展示你正在制作的那个

您需要使用and定义两个操作,其中,
{action}
是关键字的占位符,用于标识需要调用的函数。前者仅在用户登录时有效。后者用于未经验证的用户的请求

两个钩子都应该引用您试图调用的同一个函数

下面的示例返回已发送的请求id或带有
'Nothing'
的字符串作为响应,以测试结果

add_action( 'wp_ajax_nopriv_update_status', 'update_status' ) ;
add_action( 'wp_ajax_update_status', 'update_status' );
function update_status() {
  $request_id = isset( $_POST[ 'request_id' ) ) ? 
    $_POST[ 'request_id' ) : 
    'Nothing';
  echo $request_id;
}
另一种更现代的方法是使用。这使您能够在哪里获得对反URL和清理的更多控制

您的端点看起来像这样
https://yourwebsite.com/wp-json/api/v1/update
。您可以通过使用获取REST端点的静态URL,就像您使用
admin\u URL('admin ajax.php')
一样,并且应该将其添加到队列文件中的
wp\u localize\u script
函数中

端点检查允许的方法并调用选项数组中指定的
回调。从那里,您可以访问
$request
对象,该对象包含请求中给定参数等信息

然后返回一个在前端读取的响应

add_action( 'rest_api_init', 'register_update_endpoint' );
function register_update_endpoint() {

  // Register new route to get data from
  register_rest_route( 'api/v1', // Mandatory prefix with version
    '/update/', // Name of the route, can be anything.
    array(
      'methods'   => array( 'POST' ), // Allowed methods.
      'callback'  => 'update_status' // Function to call when URL is called.
    ) 
  );

  function update_status( WP_REST_Request $request ) {
    $request_id = $request->has_param( 'request_id' ) ?
      $request->get_param( 'request_id' ) :
      'Nothing';
    $response = new WP_REST_Response( $request_id; );
    return $request_id;
  }

}

您好,Emiel,谢谢您的帮助,我的php函数之后有这些操作,我的代码是:``函数更新\状态(){echo'警报('I am update function!!!!');“;}添加\操作('wp\ U ajax\更新\状态','更新\状态');添加动作('wp\u ajax\u nopriv\u update\u status,'update\u status');`我的php函数名应该在wp_ajax和wp_ajax_nopriv之后吗?是的,在
wp_ajax
wp_ajax_nopriv
之后的任何内容都是操作的名称。因此,在AJAX请求中,您应该发送
action=update\u status
来调用该钩子。例如:
wp\u ajax\u nopriv\u foobar
应该通过
?action=foobar
从ajax调用。这就是WP知道要在服务器上调用哪个函数的方式。但是,我建议您不要将带有JavaScript的HTML作为响应发送回去,因为您已经收到了一个JavaScript响应,并且可以根据响应决定从那里做什么。好的,我还有一个问题,我如何使用没有表单的操作,我正在从一个模式工作,我有一个项目列表,当用户按下delete按钮时,我需要删除一个项目,然后我想从我的数据库表中删除所选项目,我认为执行此任务不需要表单,我的问题是它没有操作,如果可能,我可以在哪里添加操作而不使用表单,在你的问题中,你已经在上面构建了类似的东西,对吗?只需创建另一个钩子并使用AJAX调用这个钩子。您可以将任何类型的数据发送到钩子。
add_action( 'rest_api_init', 'register_update_endpoint' );
function register_update_endpoint() {

  // Register new route to get data from
  register_rest_route( 'api/v1', // Mandatory prefix with version
    '/update/', // Name of the route, can be anything.
    array(
      'methods'   => array( 'POST' ), // Allowed methods.
      'callback'  => 'update_status' // Function to call when URL is called.
    ) 
  );

  function update_status( WP_REST_Request $request ) {
    $request_id = $request->has_param( 'request_id' ) ?
      $request->get_param( 'request_id' ) :
      'Nothing';
    $response = new WP_REST_Response( $request_id; );
    return $request_id;
  }

}