我已经阅读了关于同一问题的其他问题,但对我的情况似乎没有任何帮助。也许有人在我的代码中看到了我看不到的东西?
我创建了一个带有类的插件,然后我有一个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.jsjQuery(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”,一切都是正确的。
有线索吗?
提前谢谢你。