WordPress插件中的ajax问题

时间:2016-11-07 21:17:52

标签: jquery ajax wordpress

我试图在WP插件上创建一个插件,然后使用在线插件。

我对插件的ajax部分(它是一个电子邮件列表构建器)有严重的困难。

这是我的.js jQuery代码,应该在localhost上运行一些php代码,并在警告窗口中显示成功/错误消息:

jQuery(document).ready(function($){     

    var wpajax_url = document.location.protocol + '//' + document.location.host + 'wordpress_plugin_course/wp-admin/admin-ajax.php?action=plb_save_subscribtion';

    $('form.plb-form').bind('submit', function(){

        $form = $(this);  
        var form_data = $form.serialize();

        $.ajax({
            'method':'post',
            'url':wpajax_url,
            'data':form_data,
            'dataType':'json',
            'cache':false,
            'success':function( data, textStatus ){
                if( data.status == 1 ){
                    $form[0].reset();       
                    alert(data.message);
                } else{
                    var msg = data.message +'\r'+ data.error + '\r';
                    $.each(data.errors,function(key,value){     
                        msg += '\r';
                        msg += '- ' + value;
                    });
                    alert( msg );                   
                }
            },
            'error':function(jqXHR, textStatus, errorThrown){

            }

        });

        return false;           
    });

});

php部分(是的,订阅其中的B是故意的,因为我在格式上遇到了问题,我认为在所有情况下都更容易坚持B)。

add_action('wp_ajax_nopriv_plb_save_subscribtion', 'plb_save_subscribtion');                    
add_action('wp_ajax_plb_save_subscribtion', 'plb_save_subscribtion');               
add_action('wp_enqueue_scripts', 'plb_public_scripts');     

function plb_public_scripts(){                                                              
    wp_register_script('profi-list-builder-js-public', plugins_url('/js/public/profi-list-builder.js', __FILE__ ), array('jquery'),'1.0',true);
    wp_enqueue_script('profi-list-builder-js-public');
}

我没有显示plb_save_subscribtion函数,因为它共有数百行代码并且代码工作正常:它将新订阅保存到管理区域中的订阅帖子,然后以.json格式将成功/错误消息返回给客户。

我现在需要jQuery做的是通过ajax发布并将相同的plb_save_subscribtion响应客户端放入警报窗口。

我一整天都在谷歌上搜索,试图解决这个问题,但无济于事。我没有想法,所以Iam在这里发布。这段代码有问题吗?如果没有,我应该在哪里寻找问题(因为代码是复制/粘贴的,应该工作正常,但它没有)?如果我在函数顶部放置一条简单的警报消息,警告消息就会显示出来。但是当我按下表单上的提交时,页面重新加载,我在.json中收到消息,没有警报窗口,没有ajax。有人?

1 个答案:

答案 0 :(得分:0)

在插件文件中添加以下代码

add_action( 'wp_enqueue_scripts', 'ajax_test_enqueue_scripts' );

function ajax_test_enqueue_scripts() {
    wp_enqueue_script( 'custom', plugins_url( '/custom.js', __FILE__ ), array('jquery'), '1.0', true );
    wp_localize_script( 'custom', 'postCustom', array(
        'ajax_url' => admin_url( 'admin-ajax.php' ))
    );

}


function plb_save_subscribtion(){

    print_r($_POST['form_data']);

}
add_action('wp_ajax_nopriv_plb_save_subscribtion', 'plb_save_subscribtion');                    
add_action('wp_ajax_plb_save_subscribtion', 'plb_save_subscribtion');

在js文件中添加以下内容(此处为custom.js)

jQuery('form').bind('submit', function(){



        var form_data = jQuery(this).serialize();


      jQuery.ajax({
        url : postCustom.ajax_url,
        type : 'post',
        data : {
            action : 'plb_save_subscribtion',
            form_data : form_data
        },
        success : function( response ) {               
            alert(response);
        }
    });         
});

试试这种方式。您可以在警报窗口中查看表单数据。