AJAX函数调用总是在前端返回0(不带插件)

时间:2016-02-23 作者:rajat

我通过ajax调用函数,但总是得到0作为回报。

<?php

    get_header();
    global $wpdb;

    $qry="select * from wp-terms where term_id IN(SELECT term_id as term_id FROM wp_term_taxanomy = \'category\')";

    $data=$wpdb->get_results($qry);

    foreach($data as $term)
    {
?>

        <div class="checkbox" id="checkpadding">
         <label>
            <input type="checkbox" class="catclass" value="<?php echo $term->term_id; ?>">
            <span id="checktext"><?php echo $term->name; ?></span>
          </label>
        </div>
<?php
    }

<script>
jQuery(document).ready(function() {

    jQuery(\'.catclass\').change(function () {

        if (this.checked) {
            var catid = ((this.value));
            var ajaxurl = \'<?php echo admin_url(\'admin-ajax.php\'); ?>\';
            jQuery.ajax({
                url: ajaxurl,
                data: {
                    \'action\': \'getpost\',
                    \'catid\': catid
                },
                success: function (data) {
                    alert(data);
                    if(data.type == "success") {
                        alert("success");
                    }
                    else {
                        alert("AJAX error")
                    }
                },
                error: function (errorThrown) {
                    console.log(errorThrown);
                }
            });


        }
    });
});
</script>
<?php

    get_footer();

    add_action(\'wp_ajax_getpost\',\'getpost\');

    add_action(\'wp_ajax_nopriv_getpost\', \'getpost\');

    function getpost() {

        echo "hi";
        die();

    }

?>

1 个回复
最合适的回答,由SO网友:fischi 整理而成

首先,您的代码中有一些错误。

术语表称为wp_terms 而不是wp-terms$qry 不正确,内部查询的WHERE-条款:SELECT term_id as term_id FROM wp_term_taxanomy = \'category\' 应该是SELECT term_id as term_id FROM wp_term_taxanomy WHERE taxonomy = \'category\'$wpdb->prefix 而不是静态wp_ (并非所有WordPress安装都使用wp_AJAX 函数,而不是functions.php

清理后

可以使用如下代码:

您的模板文件

<?php

    get_header();
    global $wpdb;

    $qry = "select * from {$wpdb->prefix}terms where term_id IN ( SELECT term_id as term_id FROM {$wpdb->prefix}term_taxanomy WHERE taxonomy = \'category\' )";

    $data = $wpdb->get_results( $qry );

    foreach( $data as $term ) {
?>
        <div class="checkbox" id="checkpadding">
         <label>
            <input type="checkbox" class="catclass" value="<?php echo $term->term_id; ?>">
            <span id="checktext"><?php echo $term->name; ?></span>
          </label>
        </div>
<?php
    }

<script>
jQuery(document).ready(function() {

    jQuery(\'.catclass\').change(function () {

        if (this.checked) {
            var catid = ((this.value));
            var ajaxurl = \'<?php echo admin_url(\'admin-ajax.php\'); ?>\';
            jQuery.ajax({
                url: ajaxurl,
                data: {
                    \'action\': \'getpost\',
                    \'catid\': catid
                },
                success: function (data) {
                    alert(data);
                    if(data.type == "success") {
                        alert("success");
                    }
                    else {
                        alert("AJAX error")
                    }
                },
                error: function (errorThrown) {
                    console.log(errorThrown);
                }
            });


        }
    });
});
</script>
<?php

    get_footer();

?>
您的功能。php将其余部分添加到函数中。php:

<?php

    add_action(\'wp_ajax_getpost\',\'getpost\');

    add_action(\'wp_ajax_nopriv_getpost\', \'getpost\');

    function getpost() {

        echo "hi";
        die();

    }

?>
这种情况下你应该没事。

调试

考虑启动AJAX 在不使用select中的变量的情况下调用,以确保正确注册该变量。

之后,创建$array 对于您的响应,您可以使用wp_send_json(), 所以你可以像这样处理你的价值观data.type 等等。

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i