插件类内部的AJAX调用未触发

时间:2017-04-13 作者:Dani

我已经阅读了关于同一问题的其他问题,但对我的情况似乎没有任何帮助。也许有人在我的代码中看到了我看不到的东西?

我创建了一个带有类的插件,然后我有一个AJAX调用,当我单击页面上的HTML元素时会触发该调用。除了没有进入插件内部的回调之外,所有这些似乎都正常工作。

plugin.php

class BSPFPluginClass {
  protected $nonce = \'mynonce\';

  public function __construct() {
    /** other actions here ... */
    add_action( \'wp_enqueue_scripts\', array( $this, \'myinit\' ) );
    add_action( \'wp_ajax_myajaxcall\', array( $this, \'myajaxcall\' ) ); // executed when logged in
    add_action( \'wp_ajax_nopriv_myajaxcall\', array( $this, \'bspf_ajax_voting\' ) ); // executed when logged out
  }

  public function myinit() {
    // Register the script
    wp_register_script( \'plugin-js\', plugins_url( \'js/plugin.js\', __FILE__ ), array() );

    if (is_page(\'somepage\')) {
      // Enqueued script with localized data.
      wp_enqueue_script( \'plugin-js\' );
      // Localize the script with new data
      wp_localize_script( \'plugin-js\', \'plugin_ajax\', [
        \'ajax_url\' => plugins_url( \'plugin.php\', __FILE__ ), 
        \'nonce\'    => wp_create_nonce( $this->nonce ),
      ]);
    }
  }

  public function myajaxcall() {
    check_ajax_referer( $this->nonce );
    if (true) {
      echo \'Yes it works!\';
    }
    else {
      echo \'No it does not work!\';
    }
    wp_die(); // stop executing script
  }
}
然后,js/plugin.js

jQuery(document).ready(function($) {
  $(".myclass").click(function() {
    $.post(plugin_ajax.ajax_url, {
      _ajax_nonce: plugin_ajax.nonce,
      action: \'myajaxcall\'
    }, function(response) {
      console.log(\'SUCCESS: \'+response);
    }).done(function() {
      console.log(\'DONE\');
    }).fail(function() {
      console.log(\'ERROR\');
    }).always(function() {
      console.log(\'ALWAYS\');
    });
  });
});
当我使用trigger类点击HTML元素时,一切都进行得很顺利,我在控制台上看到了以下内容:

SUCCESS: 
DONE
ALWAYS
因此,除了没有输入动作“myajaxcall”,一切都是正确的。

有线索吗?

提前谢谢你。

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

这个ajax_url 应该是admin_url( \'admin-ajax.php\' ) 而不是plugins_url( \'plugin.php\', __FILE__ ) 当您本地化js变量时。

相关推荐

WordPress AJAX错误400向远程站点发送数据的错误请求

我正在使用发件人。net获取电子邮件订阅列表。这个网站给了我一些信息,可以将用户的电子邮件添加到订阅列表中。我想使用WordPress ajax来实现这一点。但它返回错误400错误请求。我的代码是:文件ajax新闻脚本。js公司: jQuery(document).ready(function($){ // Perform AJAX send news on form submit $(\'form#fnews\').on(\'submit\', funct