Функция обратного вызова плагина Wordpress возвращает 0 - PullRequest
0 голосов
/ 16 июня 2011

я ищу ответ на мою проблему, так как дни ...

Вот моя проблема. Я делаю плагин для WordPress, используя jquery и ajax. На данный момент я просто пытаюсь заставить веб-пример работать:)

Функция обратного вызова, возвращает каждый раз 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>

Спасибо за вашу помощь. Yann

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

Не уверен, что это ваша проблема, но я получил ответ "0", и мне потребовалось самое большое время, чтобы понять это.Помимо того, что вы поставили exit или die в конце своей функции php, я обнаружил, что вы должны поместить свой бит add_action('wp_ajax_... на верхний уровень вашего плагина.Я вложил его в мой admin_menu крючок, который не работал.

1 голос
/ 19 марта 2013

Я застрял в этом на день или два, а потом обнаружил, что забыл включить 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;
}
1 голос
/ 09 августа 2011

может быть, вам нужно добавить '_callback'

add_action('wp_ajax_join_mailinglist', 'join_mailinglist');

вот так

add_action('wp_ajax_join_mailinglist', 'join_mailinglist_callback');
...