AJAX调用未激活回调函数

时间:2017-05-25 作者:BernardA

我已经为此挣扎了几天了,所以欢迎提供任何帮助。这不是我第一次用WP设置Ajax,所以我至少有一些想法。它涉及一个非常标准的表单验证和向数据库输入信息。This all inside of a plugin.

那么,工作原理是:表单提交工作,jquery脚本被激活,并将输入信息转发到回调PHP文件。

问题是,由于某种原因,处理该PHP文件上表单的特定函数没有被激活。

那么,我有什么?我会跳过这个表格,因为它看起来很标准。

1-javascript/jquery

/插件/警报小部件/提交处理程序。js公司

jQuery(document).ready( function() {

jQuery("#alert_set_form").on("submit", function(e) {
    e.preventDefault();
    var info = jQuery("#alert_set_form").serialize();
    // Post to the server
    jQuery.ajax({       
        type:"POST",
        url:ajaxAlert.ajaxurl,
        data:info,
        dataType:\'json\',
        success: function(data){
             jQuery("#alert_set_form .stm-validation-message").html(data);
        }
    });
});
});
1-构建表单并处理验证/数据输入的主PHP插件文件。

/插件/警报小部件/警报小部件。php

add_action(\'wp_ajax_bda_alert\', \'bda_alert_validation\');
add_action(\'wp_ajax_nopriv_bda_alert\', \'bda_alert_validation\');

/* this commented out code was placed just to check if call hits the file, which it does

if( isset($_POST[\'model\'])){
                $criteria = array(
                              \'model\' => $_POST[\'model\'],
                              \'body\' => $_POST[\'body\'],
                              \'price\' => $_POST[\'price\'],
                              \'mileage\' => $_POST[\'mileage\'],
                              \'ca-year\' => $_POST[\'ca-year\'],
                              \'fuel\' => $_POST[\'fuel\'],
                              \'transmission\' => $_POST[\'transmission\']
                              );

            $criteria = base64_encode(serialize($criteria));
            $response = $criteria;
            wp_send_json( $response );
            wp_die();
        }
*/
    function bda_alert_validation(){
     //does validation and input 

            $response =array(
                \'data\'  => \'success\',
                \'supplemental\' => array(
                    \'message\' => \'success\',
                ),
            ) ;

            wp_send_json( $response );
            wp_die();       
    }



add_action(\'init\', \'alert_form_init\' );

function alert_form_init() {
wp_register_script( "alert_form_script", WP_PLUGIN_URL.\'/alert-widget/submit_handler.js\', array(\'jquery\') );
wp_localize_script( \'alert_form_script\', \'ajaxAlert\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' )));

wp_enqueue_script( \'jquery\' );
wp_enqueue_script( \'alert_form_script\');

}

2 个回复
最合适的回答,由SO网友:birgire 整理而成

由于将表单序列化为ajax数据,因此可能会丢失action 表格中的部分:

<input type="hidden" name="action" value="bda_alert">
因此您的ajax请求将包含

/wp-admin/admin-ajax.php?action=bda_alert&...
应该调用wp_ajax_bda_alertwp_ajax_nopriv_bda_alert 操作回调。

SO网友:Tom J Nowell

上述AJAX回调可以重写为REST API端点,如下所示:

function bda_alert_validation( $request ){
    // $info = $request[\'info\'];
    $response = array(
        \'data\'  => \'success\',
        \'supplemental\' => array(
            \'message\' => \'success\'
        )
    ) ;
    return $response;      
}

add_action( \'rest_api_init\', function () {
        register_rest_route( \'bernarda/v1\', \'/validatealert/\', array(
                \'methods\' => \'POST\',
                \'callback\' => \'bda_alert_validation\'
        ) );
} );
现在您的端点位于example.com/wp-json/benarda/v1/validatealert/ 你能做到的POST 针对的请求

结束

相关推荐

AJAX不将表单数据发布到PHP函数中的查询

我正在尝试统计自定义wordpress数据库中的数据。Mysql查询工作正常,因为我已经直接使用默认值进行了测试,但当从表单向ajax发送数据时,它不会为查询发送php中的数据。这是我的函数代码。php:function searchdata() { $postcode = $_POST[\'$postcode\']; global $wpdb; $resultdyn = $wpdb->get_var( \"SELE