我正在尝试制作一个自定义插件,一些简单的东西让我头痛不已。我完全按照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回调”。我不明白为什么这不起作用。
任何帮助都将不胜感激。谢谢
最合适的回答,由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();
...