管理员AJAX返回0而不是插入数据

时间:2015-08-20 作者:wp Picture

我对jQuery和AJAX尤其陌生。我有一个小问题,返回值总是0,尽管我认为这实际上是成功消息,它没有返回任何内容。

我已经搜索了Google verse,在PHP回调上有die()函数,我相信add\\u操作是正确的。

我在一个本地主机上工作,但我怀疑这会影响它,这都是在管理中,而不是在前端。我还检查了js是否已排队并本地化。

我还测试了http://codex.wordpress.org/AJAX_in_Plugins 它还返回了0,这让我怀疑它是否不是下面概述的代码。

现在我只是想让它把一些东西发送回jQuery。任何帮助都将不胜感激。

jQuery

<script>
                        jQuery(document).ready(function() {
                            jQuery(".bakkah_session_registrtation").click(function(e){
                                e.preventDefault();
                                jQuery("#session_modal").slideToggle(); 
                            });

                            jQuery("#session_registration_form").submit(function(e){
                                e.preventDefault();
                                jQuery("#bakkah_submit_button").attr("disabled", "disabled");
                                var url = jQuery(this).attr("action");
                                var data = jQuery(this).serialize();
                                var obj = jQuery(this);

                                jQuery.ajax({
                                    url : url,
                                    type : "POST",
                                    data : {action : "bakkah_register_session", data : data},
                                    success : function(response){
                                        jQuery(".message_register_bakkah").html(response);
                                        jQuery("#bakkah_submit_button").removeAttr("disabled");
                                        obj[0].reset(); 
                                        console.log (response);
                                    },
                                    error: function(response) {
                                        console.log(response);            
                                    }
                                });
                            });
                        });

                        jQuery("#course_select").change(function(){
                            var course = jQuery(this).val();

                            if(course == ""){
                                jQuery("#session_select").attr("disabled", "disabled");
                                jQuery("#session_select #default_session").attr("selected", "selected");
                            }else{
                                jQuery("#session_select").removeAttr("disabled");

                                jQuery("#session_select option").each(function(){
                                    jQuery(this).prop("disabled", true);
                                });

                                jQuery("#session_select option").each(function(){
                                    if(parseInt(jQuery(this).attr("var")) == parseInt(course)){
                                        jQuery(this).prop("disabled", false);
                                    }
                                });
                            }
                        });
                    </script>
PHP:

add_action(\'wp_ajax_bakkah_register_session\', \'bakkah_register_session\');
add_action(\'wp_ajax_nopriv_bakkah_register_session\', \'bakkah_register_session\');

function bakkah_register_session(){
    global $wpdb;

    $data = array();
    parse_str($_POST[\'data\'], $data);   

    $insert = $wpdb->insert(
            $wpdb->prefix."bakkah_course_session_registration",
            $data
    );


    wp_die();
}

1 个回复
SO网友:Mike

来自admin ajax的0状态。php表示未解析任何“操作”。

将要分配句柄的脚本排入队列时,在使用wp\\u localize\\u脚本时需要使用此句柄,此外,还需要分配url。https://codex.wordpress.org/Function_Reference/wp_localize_script

wp_register_script( \'some_handle\', \'path/to/myscript.js\' );

wp_localize_script( \'some_handle\', \'object_name\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) );

wp_enqueue_script( \'some_handle\' );

然后为了让JS正确调用URL

    jQuery.ajax({
                                url : object_name.ajax_url,
                                type : "POST",
                                dataType: "json",
                                data : {
                                    data : data,
                                    action : "bakkah_register_session"
                                },
                                success : function(response){
                                    jQuery(".message_register_bakkah").html(response);
                                    jQuery("#bakkah_submit_button").removeAttr("disabled");
                                    obj[0].reset(); 
                                    console.log (response);
                                },
                                error: function(response) {
                                    console.log(response);            
                                }
                            });
此外,在PHP中,您还需要从函数中实际返回一些东西,以便jQuery进行处理,返回的任何内容都需要是json\\U编码的数组。

    $whatever[\'type\'] = \'Success\';
    $whatever[\'message\'] = \'Some returned msg string\';  
返回json\\u encode($whatever);

在jQuery脚本中,您可以将这些值引用为response.typeresponse.message 允许您执行检查。。。。

    success : function(response){
       if( response.type == \'success\')    {
            // do something
       }
       else    {
            // Failed, do something else
       } 
    }                           

结束