前端按钮上的AJAX点击不起作用-自定义插件

时间:2019-03-09 作者:LonelyLodge

我正在尝试制作一个自定义插件,一些简单的东西让我头痛不已。我完全按照Wordpress Codex的例子,看了无数类似的帖子,但没有任何东西对我有用。

以下是我的代码结构:

在my\\u插件中。php文件,其中包含我的主插件类和所有php函数(在我的主类中):

public function __construct() {
    add_action( \'wp_ajax_foobar\', array( $this, 
    \'my_ajax_foobar_handler\') );
    add_action( \'wp_ajax_nopriv_foobar\', array( $this, 
    \'my_ajax_foobar_handler\' ) );

    add_action( \'wp_enqueue_scripts\', array( $this, \'my_enqueue\') ); 
}

public function my_enqueue() {
    wp_enqueue_script( \'ajax-script\', plugins_url( \'/js/my_query.js\', 
    __FILE__ ), array(\'jquery\') );
    wp_localize_script( \'ajax-script\', \'my_foobar_client\', array( 
    \'ajax_url\' => admin_url( \'admin-ajax.php\' ), \'we_value\' => 1234 ) );
}

public function my_ajax_foobar_handler() {
        error_log("Ajax callback");

        // Don\'t forget to stop execution afterward.
        wp_die();
}
在另一个页面中,my\\u页面。php我有:

<input type="submit" class="button" name="insert" value="Submit" />

<script>

// Create a function to pick up the link click

$(\'button\').click(function(){
    <?php error_log("Got button click"); ?>

    jQuery.post(
        my_foobar_client.ajaxurl, 
        {
           \'action\': \'foobar\',
           \'foobar_id\':   123
        }
);

</script>
当我点击按钮时,我的日志文件会显示“Get button click”(获取按钮点击),因此前端会检测到按钮点击。但是,我的调试日志不会拾取“Ajax回调”。我不明白为什么这不起作用。

任何帮助都将不胜感激。谢谢

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

好吧,这很容易出错——只是一个输入错误;)

您可以使用此行本地化脚本:

wp_localize_script( \'ajax-script\', \'my_foobar_client\', array( 
\'ajax_url\' => admin_url( \'admin-ajax.php\' ), \'we_value\' => 1234 ) );
所以你用ajax_url 用于存储管理员ajax的url的字段。php

但您在js文件中使用这一行:

my_foobar_client.ajaxurl,
而且没有ajaxurl 该对象中的字段。应该是这样的ajax_url

还有一个输入错误:

$(\'button\').click(function(){
据我所知,你的表格中没有按钮。有类型为submit with class的输入button, 所以应该是:

$(\'.button\').click(function(){
此外,您没有阻止单击后的默认行为,因此您的表单仍将导致重新加载。。。这将解决以下问题:

$(\'.button\').click(function(e){
    e.preventDefault();
    ...

相关推荐

AJAX Call适用于登录用户,并为访客返回“Bad Request”

我有一个WordPress网站,它使用ajax在前端提交表单。当登录用户提交表单时,一切正常。当未登录用户提交表单时,我收到一个“错误请求”错误。这是我的代码:JS:$(\'form\').on(\'submit\', function (e) { e.preventDefault(); // Submit the POST request $.ajax({ url: jsobject.ajaxurl,