当使用具有相同处理程序的多个表单时,php处理程

时间:2014-10-15 17:31:07

标签: php jquery ajax submit

我使用以下代码输出一个包含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();
}

1 个答案:

答案 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函数。