我使用以下代码输出一个包含FAQ的表。
// get faq
global $wpdb;
$faq = $wpdb->get_results("SELECT ID, q, a, cat, quality, active FROM ce_faq");
foreach ($faq as $i) {
echo
'<div>
<a id="'.$i->ID.'" class="question" href="#">'.$i->q.'</a>
</div>
<div id="a'.$i->ID.'" class="answer">
<p>'.$i->a.'</p>
<form method="POST" id="form'.$i->ID.'">
<input type="hidden" value="'.$i->ID.'" name="faq_id"></input>
<input type="hidden" name="action" value="ce_faq_quality"/>'
.wp_nonce_field( 'name_of_my_action','name_of_nonce_field' ).
'<p><b> Was this answer usefull? <input type="radio" name="quality" value="1" class="quality_radio"> yes </input><input type="radio" name="quality" value="-1" class="quality_radio"> No </input> </b></p>
</form>
</div>';
}
echo '<div id="feedback">feedback</div>';
我使用jQuery()。slidetoggle在有人点击问题时切换答案。我想让最终用户通过简单的是或否问题就问题提供反馈。选择其中一个单选按钮时,应提交表单。触发器jQuery(&#39; .quality_radio&#39;)。单击正在工作,并且正确获取了formid。
问题:函数ce_faq_quality();遗憾的是没有回应,当我使用console.log(qu)时,我得到例如&#39; faq_id = 1&amp; action = ce_faq_quality&amp; name_of_nonce_field = 7dd1d930af&amp; _wp_http_referer =%2Ffaq%2F&amp; quality = 1&#39;,这似乎对我来说是正确的。我也得到警报&#39;这是有效的&#39;。然而,php处理程序似乎无法工作。 div反馈变为0(而不是成功的php函数&#39;)并且查询也没有执行(虽然我知道它的工作效率为120%)。我在这里不知所措......
已解决:处理程序无法从我正在处理的页面访问...
jQuery('.question').click(
function(){
var id = this.id;
jQuery('#a'+id).slideToggle(350);
});
jQuery('.quality_radio').click(
function(){
var formid = jQuery(this).closest('form').attr('id');
var formid = '#'+formid;
jQuery(formid).submit(ajaxSubmit(formid));
});
function ajaxSubmit(formid){
var qu = jQuery(formid).serialize();
console.log(qu);
jQuery.ajax({
type:"POST",
url: "/wp-admin/admin-ajax.php",
data: qu,
success:function(data){
jQuery("#feedback").html(data);
alert('this is working');
}
});
return false;
}
这是我用来处理表单的php函数。
add_action('wp_ajax_ce_faq_quality', 'ce_faq_quality');
add_action('wp_ajax_nopriv_ce_faq_quality', 'ce_faq_quality');
function ce_faq_quality(){
$quality = 1; //$_POST['quality'];
$faq_id = 1; //$_POST['faq_id'];
global $wpdb;
$wpdb->query($wpdb->prepare("UPDATE `ce_faq` SET `quality`= `quality` + $quality WHERE id = $faq_id"));
echo 'succes php function ';
die();
}
答案 0 :(得分:1)
您的formid
变量超出了ajaxSubmit
函数的范围。你应该尝试:
jQuery('.quality_radio').click(
function() {
var formid = jQuery(this).closest('form').attr('id')
var formid = '#' + formid;
jQuery(formid).submit(ajaxSubmit(formid));
});
function ajaxSubmit(formId) {
var qu = jQuery(formid).serialize();
jQuery.ajax({
type: "POST",
url: "/wp-admin/admin-ajax.php",
data: qu,
success: function(data) {
jQuery("#feedback").html(data);
}
});
return false;
}
这样您就可以将formid
传递给ajaxSubmit函数。