【问题标题】:AJAX in WP Plugin returns 0 alwaysWP 插件中的 AJAX 总是返回 0
【发布时间】:2014-05-16 13:37:58
【问题描述】:

在 WP Theme 中成功实施后,我正尝试在我的 Under-dev Plugin 之一中实施 WP AJAX。

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) 排入队列并检查了所有实例。这次我做错了什么 - 我获得的过程在一个主题中工作 - 我之前工作过。

【问题讨论】:

  • 你在PHP函数中用print_r['$_POST'];获得了AJAX选项吗?
  • 我怕在哪里发这个?我在函数中添加了 print_r,它返回语法错误:Parse error: syntax error, unexpected '['... :(
  • 你能把整个错误粘贴到一个pastebin吗?我在上面的代码中没有看到语法错误,您还为将 AJAX 与 Wordpress 一起使用做了一切正确的事情。哦,等我!尝试不带“”的数据键 -> 操作:“deactivate_ad”,...
  • 我试过data: { "action": deactivate_ad, "id": id },但它没有触发 AJAX。然后我尝试了"action": 'deactivate_ad',它的行为与预期的双引号一样,像往常一样返回零 (0)。
  • 另外,您不需要定义ajaxurl,正如codex 中所说:“因为 2.8 ajaxurl 始终在管理标头中定义并指向 admin-ajax .php".

标签: jquery ajax wordpress


【解决方案1】:

您应该将以下代码从adzonia-view.php 替换为wp-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_*中添加动作已经来不及了。

【讨论】:

  • 你真的救了我,我已经想了好几个小时了!谢谢!
【解决方案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 不是您的问题。不幸的是,我无法测试其他代码,因为它不够!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多