Wordpress AJAX没有调用PHP函数

时间:2015-03-12 05:39:06

标签: php jquery ajax wordpress

我尝试了很多不同的东西但是我无法使用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。这里有什么想法吗?

2 个答案:

答案 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调用中第一个参数的结尾相匹配。

The WordPress documentation

答案 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;

}