我正在尝试使用 wp codex 指南将 ajax 集成到 wordpress 中。 在我添加的 PHP 中:
wp_enqueue_script ( 'my_ajax', ADMIN_URL . 'js/ajax.js','jquery','1.0.0' );
wp_localize_script( 'my_ajax', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
阿贾克斯代码是:
jQuery.ajax({url: MyAjax.ajaxurl, type: "POST",data: {action: 'myaction',postID : MyAjax.postID}, success: function(response) {
alert('Got this from the server: ' + response);
}});
ajax 应该调用的 PHP 函数是:
function ajax_function() {
...do something...
}
add_action('wp_ajax_myaction', 'ajax_function');
add_action('wp_ajax_admin_myaction', 'ajax_function');
ajax 调用成功(“警报”起作用),但是,永远不会调用 php 函数“ajax_function”。 在做了一些调试之后,我意识到即使动作调用 add_action(‘wp_ajax_ 在全局 $wp_filter 数组中设置了一个新元素,当相应的 do_action 在 admin-ajax.php 中运行时,$wp_filter 数组不再包含该元素。
因此,“ajax_function”函数被忽略。 知道为什么不调用该函数吗?
在我的项目中,我是这样做的
PHP
function foo() {
echo 'bar';
}
add_action('wp_ajax_foo', 'foo' ); // executed when logged in
add_action('wp_ajax_nopriv_foo', 'foo' ); // executed when logged out
Javascript
data = { action: 'foo', avalue: 'some value', 'anothervalue': 'another value' };
jQuery.post(ajaxurl, data, function(response){
alert(response);
});
请遵循以下代码:
add_action( 'wp_ajax_add_myfunc', 'prefix_ajax_add_myfunc' );
add_action( 'wp_ajax_nopriv_add_myfunc', 'prefix_ajax_add_myfunc' );
function prefix_ajax_add_myfunc() {
// Handle request then generate response using WP_Ajax_Response
}
并在您的 ajax 调用中执行此操作:
jQuery.post(
ajaxurl,
{
'action': 'add_myfunc',
'data': 'foobarid'
},
function(response){
alert('The server responded: ' + response);
}
);
在 ajax 调用中你将调用你的函数而不 prefix_ajax_
. 剩下的只有打电话了。 在那种情况下它是 add_myfunc
. 在响应中它将发送 done
如果一切顺利的话。 否则响应将是 0
或者 -1
.
希望它会有所帮助。 谢谢。