2011-06-16 79 views
0

我正在寻找一个答案,因为我的问题,因为天...Wordpress插件回调函数返回0

这是我的问题。 我正在使用jquery和ajax制作wordpress插件。 目前我只是想使Web例如工作:)

回调函数,返回每次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 = '[email protected]'; 
    $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> 

感谢您的帮助。 晏

回答

1

也许你应该加上“_callback”

add_action('wp_ajax_join_mailinglist', 'join_mailinglist'); 

这样

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

不知道这是你的问题,但我得到的只是“0”和响应我花了最长的时间才弄明白。除了确保您将exitdie放在您的php函数的最后,我发现您必须将您的add_action('wp_ajax_...位置于插件的顶层。我把它嵌套在我的admin_menu钩子里面,但没有奏效。

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; 
}