Ajax contact form returnig 0

时间:2015-08-01 作者:user2205967

我已经阅读了这个网站上的很多回复,但找不到我的代码存在的问题。

表格为:

<?php while (have_posts()) : the_post()?>
        <form  method=\'post\'  id="dav-international" >
            <label for="dav-address">Address:</label><input type="text" name="dav-address" id="dav-address"/>
            <button type="submit" id="submit">Submit</button>
            </form>
<?php endwhile;?>
功能位于function.php (主页已排队):

    add_action(\'wp_enqueue_scripts\', \'dav_script\');
    function dav_script(){
        if (is_front_page()){
            $dav_nonce = wp_create_nonce(\'contact_form\');
            wp_localize_script(\'home-page\', \'ajaxObj\', array(
                    \'ajaxurl\' => admin_url(\'admin-ajax.php\'),
                    \'nonce\' => $dav_nonce,
            ));
        }
    }




    add_action(\'wp_ajax_nopriv_dav_validation\', \'dav_form_validation\');
    add_action(\'wp_ajax_dav_validation\', \'dav_form_validation\');


function dav_form_validation(){
    global $wpdb;
    if ($_SERVER["REQUEST_METHOD"] == \'POST\'){
    check_ajax_referer(\'contact_form\');
    $dav_address = sanitize_text_field($_POST[\'info\']);

    $dav_ajax_data = array();
        $dav_ajax_data[\'dav-address\'] = $dav_address;

    echo json_encode($dav_ajax_data);
    }
    wp_die();
}
jQuery是:

var $j = jQuery;
                    $j(\'#submit\').click(function(e){
                        var $j = jQuery;
                        e.preventDefault();
                        if ($j(\'#dav-address\').val().length > 0){
                            var formInfo = $j(\'form\').serialize();
                            var formdata = {
                                action : \'dav_validation\',
                                  _ajax_nonce: ajaxObj.nonce,
                                  info : formInfo
                            }
                            $j.ajax({
                                type:\'post\',
                                url: ajaxObj.ajaxurl,
                                data: formdata,
                                success: function(data){
                                    console.log(data);
                                }
                            })
                        }
                        });
我相信我正确地遵循了WordPress codex上的说明,但控制台继续输出0。我被困在这个问题上,似乎无法解决。

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

多亏了@shanebp的指导,解决了这个问题:问题是如何通过PHP和ajax调用数据。我没有在输入字段中使用name属性,而是使用var\\u dump查看$\\u POST输出的内容,并发现在jQuery中创建的数组(formdata)就是$\\u POST正在检索的数组。我必须返回通过ajax中formdata数组传递的信息键,而不是使用name属性。我猜这就是wordpress使用ajax和php的方式。

SO网友:shanebp

你凭什么认为这是真的?

if (isset($_POST[\'submit\'])){
在中function dav_form_validation 这个die() 在2个条件中。无论条件是否满足,都应该调用它。添加2个else子句并返回错误消息。

通常响应为“0”,表示找不到ajax挂钩。但是您的代码在这方面似乎还可以。

结束

相关推荐

#PUBLISH上的AJAX函数只保存为草稿--如何将其发布?

我有一个称为“轮班”的自定义岗位类型(如员工轮班)。发布班次时,我运行一个Ajax函数来检查班次是否没有调度冲突。如果存在计划冲突,将弹出一个对话框,提醒用户冲突并询问他们是否要继续。如果他们选择“取消”,则不会发布帖子。如果他们选择“继续”,则发布帖子。问题是:如果他们选择“继续”,帖子将保存为草稿,而不是发布。当他们单击“发布”按钮时,我如何发布帖子?以下是JS(简化了一点,以便您可以看到重要部分):$(\'#publish\').on(\'click\', function (e) { &#