jquery — обработчик php не отвечает при использовании формы mutliple с тем же обработчиком

Я использую следующий код для вывода таблицы с 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 (‘. quality_radio’). click, а также корректно извлекается formid.

проблема: функция ce_faq_quality (); к сожалению не отвечает, когда я использую console.log (qu) я получаю, например, ‘faq_id = 1&действие = ce_faq_quality&name_of_nonce_field = 7dd1d930af&_wp_http_referer =% 2Ffaq% 2F&качество = 1 ‘, что мне кажется правильным. Я также получаю предупреждение «это работает». Однако, похоже, что обработчик php не работает. обратная связь div превращается в 0 (вместо «успешной функции php»), а также запрос не выполняется (хотя я знаю, что он работает на 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

Решение

Ваш 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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]