我尝试了很多不同的东西但是我无法使用Wordpress来运行AJAX。我显然没有得到什么,但我不知道它是什么。 PHP函数运行正常,因为我已经测试过,它看起来似乎没有进入JS。这个想法是,当有人点击#subscribe-btn div时,其用户元的更新,没有什么过于复杂。任何关于为什么这不起作用的帮助都会很棒。
这是我主题的functions.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中的action标识从subscribe更改为subscribe_cat,并将ajax url从functionAjax.ajaxurl更改为ajaxurl。现在它的回应。但是我得到两次成功警报,这是我不明白的,它似乎并没有实际触发PHP函数,或者至少不正确,因为当我只是调用函数时我没有得到结果PHP没有ajax。这里有什么想法吗?
答案 0 :(得分:1)
您确实需要做的一件事是更改在WordPress主题functions.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调用中第一个参数的结尾相匹配。
答案 1 :(得分:0)
您应该将诸如query_var之类的页面信息传递为"数据"用你的ajax功能。
前端页面
<?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。
的functions.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;
}