Wordpress插件回调函数返回0

时间:2011-06-16 12:14:43

标签: jquery ajax callback wordpress-plugin

我正在寻找我的问题的答案,因为几天......

这是我的问题。 我正在使用jquery和ajax创建一个wordpress插件。 目前我只是想让一个网络示例工作:)

回调函数,每次返回0

这是我的整个代码,对于我的wordpress管理页面:

<?php

add_action('wp_ajax_join_mailinglist', 'join_mailinglist');
add_action('wp_ajax_nopriv_join_mailinglist', 'join_mailinglist');


function join_mailinglist() {

$email = $_POST['email'];

if(!empty($email)) {
    $yourEmail = 'xxx@xxx.com';
    $subject = 'Add me to your mailing list';

    $success = mail($yourEmail, $subject, $email);
    if(!empty($success)) {
        echo 'Your email is subscribed to our mailing list.';
    } else {
        echo 'There was a problem. Please try again.';
    }
}


die();
}

?>

<div class="wrap">
<div id="icon-options-general" class="icon32"><br /></div>

<form method="post" id="mailinglist" action="">
<div id="message"></div>
<input type="text" name="mailinglistemail" id="mailinglistemail" />
<input type="submit" name="submit" id="mailinglistsubmit" value="Join" /><img src="    <?php admin_url(); ?>/wp-admin/images/wpspin_light.gif" alt="" class="ajaxsave"     style="display: none;" />
</form>

<script type="text/javascript" >
jQuery(document).ready(function(){
jQuery("#mailinglist").submit(function()    {
    if(jQuery("#mailinglistemail").val()=="") {
        jQuery("#mailinglist #message").text("Please enter your email address.");
        return false;
    } else {
        var email = jQuery('#mailinglistemail').val();
        if(email.indexOf("@") == -1 || email.indexOf(".") == -1) {
            jQuery("#mailinglist #message").text("Please enter a valid email address.");
            return false;
        } else {
            var data = {
                action: 'join_mailinglist',
                email: email
            };
            //alert('ici');
            jQuery("#mailinglistsubmit").hide();
            //alert('la');
            jQuery(".ajaxsave").show();
            //alert('now');
            jQuery.post("<?php echo admin_url('admin-ajax.php'); ?>", data,
            function(response){
                jQuery(".ajaxsave").hide();
                jQuery("#mailinglistsubmit").show();
                jQuery("#mailinglist #message").html(response);
                 alert('The server responded: ' + response);
            });     
            return false;
        }
    } 

});
});
</script>



</div>

感谢您的帮助。 晏

3 个答案:

答案 0 :(得分:2)

不确定这是不是你的问题,但我得到的回答只是“0”而且花了我最长的时间来弄明白。除了确保将exitdie放在php函数的末尾之外,我发现您必须将add_action('wp_ajax_...位置放在插件的顶层。我把它嵌套在我的admin_menu钩子里面,但它没有用。

答案 1 :(得分:1)

也许你必须添加'_callback'

add_action('wp_ajax_join_mailinglist', 'join_mailinglist');
像这样

add_action('wp_ajax_join_mailinglist', 'join_mailinglist_callback');

答案 2 :(得分:1)

我被困在这里一两天,然后我发现我忘了在回调函数中包含一个json_encode。

在位于插件目录的.js中,我写道:

jQuery.ajax({
    type: 'POST',
    dataType: 'json',
    data:{
        'action': 'do_ajax',
        'func':   'yell_out',
        'var':    'hi there'
    },
    beforeSend: function(x) {
        if(x && x.overrideMimeType) {
            x.overrideMimeType("application/json;charset=UTF-8");
        }
    },
    url: ajax_url,
    success:function(data){
        alert('success: ' + data);
    },
    error: function(errorThrown){
        alert('oh no: ' + errorThrown);
    });
}

对于php部分,这个:

add_action('wp_ajax_do_ajax', 'do_ajax_callback');
function do_ajax_callback(){
    switch($_REQUEST['fn']){
        case 'yell_out':
            $output = yell_out($_REQUEST['id']);
            break;
        default:
            $output = 'No function specified, check your jQuery.ajax() call';
            break;
    }

    $output = json_encode($output);
    if(is_array($output)){ print_r($output); }
    else{ echo $output; }
    die();
}

function yell_out($string){
    return $string;
}