我正在寻找我的问题的答案,因为几天......
这是我的问题。 我正在使用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>
感谢您的帮助。 晏
答案 0 :(得分:2)
不确定这是不是你的问题,但我得到的回答只是“0”而且花了我最长的时间来弄明白。除了确保将exit
或die
放在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;
}