AJAX在WP插件总是返回0(AJAX in WP Plugin returns 0 always)

2019-11-03 05:24发布

我试图实现WP AJAX在我的一个副开发插件在WP主题成功实施后。

function deactivate_ad() {

    if( isset( $_POST['id'] ) ) {
        echo $_POST['id'];
        echo 'Deactivated';
        die;
    } else {
        echo 'Sorry, not done';
        die;
    }
    wp_die(); // ajax call must die to avoid trailing 0 in your response
}

add_action('wp_ajax_deactivate_ad', 'deactivate_ad');
//add_action( 'wp_ajax_nopriv_deactivate_ad', 'deactivate_ad'); //not logged in users

和地方的作用下,我将自己的动态ID形式:

<form action="" enctype="multipart/form-data" method="post">
          <script type="text/javascript">
          var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';

          jQuery(document).on('click', '.deactivate-ad', function () {
              var id = this.id;
              alert(id);
              jQuery.ajax({
                  type: 'POST',
                  url: ajaxurl,
                  data: {
                    "action": "deactivate_ad",
                    "id": id
                  },
                  success: function (data) {
                    alert(data);
                  }
              });
          });
        </script>
<?php
        //after the db Query, within the foreach loop
        foreach( $ad_query as $the_ad ){
            $element_id = 'deactivate_' . $the_ad->id . '_' . wp_create_nonce('deactivate_' . $the_ad->id );
            // I'm just checking with the 'Deactivate' button first
            echo ( $the_ad->ad_status == 1 ? '<a class="deactivate-ad" href="#" id="'. $element_id .'">Deactivate</a>' : '<a href="?page=site-ad&id='. $the_ad->id .'&activate=true&success=true">Activate</a>' );
        }
?>
</form>

我只是想激活AJAX,这样我可以做我想做的事情呢。 但随着第一alert(id)我可以提醒id与成功的随机数,但alert(data)它总是返回0 (零)。

我入队了最新的jQuery( http://code.jquery.com/jquery-latest.min.js开头),并检查所有实例。 我在做什么错了这一次 - 我收购了一个主题工作的过程 - 我之前的工作。

Answer 1:

你应该重新地方从下面的代码adzonia-view.phpwp-adzonia.php

function deactivate_ad() {

if( isset( $_POST['id'] ) ) { echo $_POST['id']; echo 'Deactivated';

} else { echo 'Sorry, not done';

} die();

}

add_action('wp_ajax_deactivate_ad', 'deactivate_ad');

原因:
因为你在一个菜单页写的功能。 它已经与可钩在admin_menu挂钩。 所以这是来不及在添加动作wp_ajax_*



Answer 2:

尝试: data: { action: "deactivate_ad", id: id } -似乎是一个错字!

编辑:好吧,我实现了它这样的:

页面xy.php:

<div class="deactivate-ad">Jup</div>

    <script type="text/javascript">
        var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';

        jQuery(document).on('click', '.deactivate-ad', function () {
            var id = 5;
            console.log(id);
            jQuery.ajax({
                type: 'POST',
                url: ajaxurl,
                data: {
                    action: "deactivate_ad",
                    id: id
                },
                success: function (data) {
                    alert(data);
                }
            });
        });
    </script>

function.php:

function deactivate_ad() {


    if( isset( $_POST['id'] ) ) {
        echo $_POST['id'];
        echo 'Deactivated';
        die;
    } else {
        echo 'Sorry, not done';
        die;
    }
    wp_die(); // ajax call must die to avoid trailing 0 in your response
}

add_action('wp_ajax_deactivate_ad', 'deactivate_ad');
//add_action( 'wp_ajax_nopriv_deactivate_ad', 'deactivate_ad'); //not logged in users

和警报输出:5Deactivated

意思是,我不认为AJAX是你的问题就在这里。 不幸的是,因为它是不够的,我不能测试其他代码!



文章来源: AJAX in WP Plugin returns 0 always