获取check_ajax_referer的响应

时间:2019-09-08 作者:pixelngrain

如果nonce检查使用失败,我想向用户显示通知check_ajax_referer. 但是,如果失败,该函数将自行消亡。所以我想知道如果我用wp_die() 手动操作是否会导致任何问题或允许使用?

死亡本身

if(!check_ajax_referer(\'gs_nonce\', \'nonce\')) {
    // the response never sends as the function never reaches here
    wp_send_json_error(__(\'Do not be nasty with validation\', \'group-shop\'));
}
手动模具
if(!check_ajax_referer(\'gs_nonce\', \'nonce\', FALSE)) {
    wp_send_json_error(__(\'Do not be nasty with validation\', \'group-shop\'));
    wp_die();
}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

手动调用完全可以wp_die() 它可以很好地处理AJAX和非AJAX请求。只需确保返回有效的响应正文;e、 g.如果JS需要JSON响应,则返回JSON编码的字符串。

然而wp_send_json_error() 是的包装器wp_send_json() 其中使用wp_die(), 所以你不需要打电话wp_die() 如果您正在使用wp_send_json_error()wp_send_json_success().

客户端工作示例:对名为foo. 让我们假设ajax_vars 通过定义wp_localize_script().

jQuery.ajax({
  url: ajax_vars.ajax_url, // e.g. https://example.com/wp-admin/admin-ajax.php
  data: { action: \'foo\', nonce: ajax_vars.foo_nonce },
  dataType: \'json\', // <- we\'re expecting a JSON response
  success ( res ) {
    // Request succeeded, but we\'ve got an error from the server - e.g. Due to
    // an expired nonce.
    if ( ! res.success ) {
      console.log( res.data );
    // Request succeeded; no errors thrown on the server.
    } else {
      console.log( res );
    }
  },
  // Request failed - e.g. Due to an internal server error (parse/syntax error,
  // etc.).
  error ( xhr, error, status ) {
    console.log( error, status );
  }
});
服务器端:此函数处理上述AJAX请求。

function ajax_foo_handler() {
    if ( ! check_ajax_referer( \'foo\', \'nonce\', false ) ) {
        wp_send_json_error( \'Invalid Request\' );
    }

    // Run your stuff...

    wp_send_json_success( \'You may pass an array...\' );
}
add_action( \'wp_ajax_foo\', \'ajax_foo_handler\' );        // for authenticated users
add_action( \'wp_ajax_nopriv_foo\', \'ajax_foo_handler\' ); // for non-authenticated users

相关推荐

公共/非管理员用户的AJAX更新失败

我构建了一个函数,根据<select> 输入,生成一个新的数据表(TablePress插件),并通过AJAX将其插入页面。作为管理员,该功能非常适合我,但一旦我注销,它就会失败。我已经浏览了这方面的类似问题,并尝试了任何适用的解决方案,但我还没有解决这个问题。在开发工具的网络选项卡中,我可以看到admin-ajax.php, 返回200状态代码。作为非管理员,它将返回302并无限期挂起(永久加载.gif)。为了调试,我尝试简化以下实现:HTML — Form with select input