我已经尝试了很多不同的东西,但我就是无法让AJAX与Wordpress一起工作。我显然没有得到一些东西,但我不知道它是什么。自从我测试过它以来,PHP 函数工作正常,它似乎无法通过 JS。这个想法是,当有人点击 #subscribe-btndiv 它的用户元更新时,没有什么过于复杂的。任何关于为什么这不起作用的帮助都会很棒。
这是我的主题功能.php:
function add_admin_ajax()
{
wp_localize_script( 'add_ajax', 'functionAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
wp_enqueue_script( 'add_ajax', get_template_directory_uri().'/assets/js/onLoad.js', 'jquery', true);
}
add_action('template_redirect', 'add_admin_ajax');
add_action( 'wp_ajax_subscribe_cat', 'subscribe_cat' );
add_action( 'wp_ajax_nopriv_subscribe_cat', 'subscribe_cat' );
function subscribe_cat()
{
global $current_user;
if(is_user_logged_in())
{
get_currentuserinfo();
$userid = $current_user->ID;
$catsub = get_category(get_query_var('cat'));
$cat_id = $catsub->cat_ID;
$subs = get_user_meta($userid, 'user_subscriptions', true);
if(empty($subs))
{
$subs = array();
}
if(!in_array($cat_id, $subs))
{
$subs[] = $cat_id;
update_user_meta($userid, 'user_subscriptions', $subs);
//echo json_encode($subs);
}
}
die();
}
然后是jQuery:
$(document).on("click", "#subscribe-btn", function (e) {
//e.preventDefault();
$('#subscribe-btn').fadeOut(300);
$.ajax({
url: ajaxurl,
data: {action: "subscribe_cat"},
success: function() {
alert("Yay!")
},
error: function() {
alert("BOo!")
}
}); // end ajax call
});
我没有收到成功或错误消息。div 确实淡出,尽管我猜这是。这里有任何帮助吗?谢谢!
编辑:我刚刚将 add_action 中的操作标识符从订阅更改为subscribe_cat,并将 ajax url 从 functionAjax.ajaxurl 更改为简单的 ajaxurl。现在它的回应。但是,我收到了两次成功警报,我不明白,而且它似乎并没有真正触发 PHP 函数,或者至少没有正确触发,因为我没有得到当我简单地在 PHP 中调用函数时得到的结果没有 ajax。这里有什么想法吗?
您需要做的一件事是更改在WordPress主题函数.php文件中设置操作的方式。
我认为这是一个问题:wp_ajax_订阅
这:
add_action( 'wp_ajax_subscribe', 'subscribe_cat' );
add_action( 'wp_ajax_nopriv_subscribe', 'subscribe_cat' );
应该是:
add_action( 'wp_ajax_subscribe_cat', 'subscribe_cat' );
add_action( 'wp_ajax_nopriv_subscribe_cat', 'subscribe_cat' );
您在 javascript 中设置的操作需要与 wordpress add_action调用中第一个参数的结尾匹配。
WordPress文档
你应该使用 ajax 函数将页面信息(如 query_var)作为"数据"传递。
前端页面
<?php
$catsub = get_category(get_query_var('cat'));
$cat_id = $catsub->cat_ID;
?>
<script>
$(document).on("click", "#subscribe-btn", function (e) {
e.preventDefault();
$('#subscribe-btn').fadeOut(300);
$.ajax({
url: ajaxurl,
data: {
action: "subscribe_cat",
catid: "<?php echo $cat_id;?>"
},
success: function(response) {
console.log(response);
},
error: function() {
alert("BOo!")
}
}); // end ajax call
});
</script>
同样在你的 ajax 函数中,你有一个条件,该条件总是计算为 false。
函数.php
add_action( 'wp_ajax_subscribe_cat', 'subscribe_cat' );
add_action( 'wp_ajax_nopriv_subscribe_cat', 'subscribe_cat' );
function subscribe_cat(){
//changed here!!
$cat_id = $_POST['catid'];
if(!$cat_id){
echo 'cat_id is missing';
exit;
} elseif(!is_user_logged_in()) {
echo 'Not logged in!';
exit;
}
$userid = get_current_user_id();
$subs = get_user_meta($userid, 'user_subscriptions', true);
if(empty($subs))
$subs = array();
$subs[] = $cat_id;
update_user_meta($userid, 'user_subscriptions', $subs);
echo json_encode($subs);
exit;
}