Wordpress插件回调函数返回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>
感谢您的帮助。 晏
答
也许你应该加上“_callback”
add_action('wp_ajax_join_mailinglist', 'join_mailinglist');
这样
add_action('wp_ajax_join_mailinglist', 'join_mailinglist_callback');
答
不知道这是你的问题,但我得到的只是“0”和响应我花了最长的时间才弄明白。除了确保您将exit
或die
放在您的php函数的最后,我发现您必须将您的add_action('wp_ajax_...
位置于插件的顶层。我把它嵌套在我的admin_menu
钩子里面,但没有奏效。
答
我陷入了这一两天,然后我发现我忘了在回调函数中包含一个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;
}