La respuesta de Ajax siempre es 0

2

Estoy tratando de averiguar por qué mi respuesta Ajax siempre es 0. Estoy tratando de cargar metadatos en un cuadro de diálogo de JQUI basado en la ID del enlace en el que se hizo clic. Todo esto se encuentra en un archivo de plantilla single.php, no estoy seguro de si esa es la causa o no.

Aquí está mi código (editado para el espacio):

            jQuery( '#meta-dialog-box' ).dialog({
            width: "500px",
            autoOpen: false,
            show: "blind",
            hide: "explode",
            resizeable: false,
            draggable: false,
            modal: true,
            position: "center",
            closeText: "X",
            dialogClass: "co-meta-dialog-wrapper"
        });

        jQuery('a.co-meta-dialog').click(function(){
            var id = $(this).attr('id');
            var taxonomy = id.replace("co-","");
            taxonomy = taxonomy.replace("-dialog","");
            var title = $(this).text();
            jQuery( "#meta-dialog-box" ).dialog( "option", "title", title );
            jQuery( "#meta-dialog-box" ).dialog( "open" );
            jQuery( "#meta-dialog-box" ).html( '<img width="62px" height="62px" style="margin:0 auto;" src="<?php bloginfo('template_directory');?>/images/loading.gif" alt="loading..." />' );             

            //$( "#meta-dialog-box" ).html('Meta Dialog Box For: ' + id);

            switch( id ){
                case 'co-location-dialog':
                    dialog_action = 'show_co_location_dialog';
                break;

                case 'co-contact-dialog':
                    dialog_action = 'show_co_contact_dialog';
                break;

                //and so on....

                default:
                break;
            }//end switch

            jQuery.post(            
                UiAjax.ajaxurl,
                {
                    action : dialog_action,
                    postid: '<?php echo $postid; ?>',
                    tax: taxonomy
                },          
                function( response, data, status ) {
                    jQuery('#meta-dialog-box').html(response);
                    //alert(data + ' ' + status);
                }
            );
            return false;           
        });

He comprobado Firebug y mi acción se está realizando correctamente. Así que parece que mi devolución de PHP no se está disparando correctamente. Todas mis funciones de devolución de llamada PHP tienen die (); al final de ellos. Y están configurados para imprimir los metadatos. Intenté hacer eco y volver, pero todavía no tengo suerte.

Tengo todas mis acciones ajax en mi archivo functions.php así:

//location|address
add_action('wp_ajax_show_co_location_dialog', array('DS_Lingerie','get_dialog_address') );
//contact info 
add_action('wp_ajax_show_co_contact_dialog', array('DS_Lingerie','get_dialog_contact_info') );

¿Necesito configurar un complemento para hacer esto? ¿O me estoy perdiendo algo completamente diferente? He estado golpeando mi cabeza contra la pared durante aproximadamente 6 horas y no puedo entender qué estoy haciendo mal aquí.

¡Cualquier ayuda es muy apreciada! Es posible que tenga que volver a pensar cómo tengo configurada esta configuración, tal vez use una función de diálogo / modal diferente o algo así. Sugerencias y puntos de vista son 100% bienvenidos! Gracias de antemano.

    
pregunta dkmojo 25.10.2012 - 03:07

1 respuesta

5

No puedes agregar llamadas AJAX desde plantillas públicas.

  1. Tienen que ser agregados mucho antes
  2. El archivo que pasa la llamada es admin-ajax.php por un motivo: las llamadas Ajax no deben estar ocultas fuera del administrador. Por ejemplo envolver su llamada dentro de ! is_admin() dejará que falle.
  3. Los archivos de plantilla no están destinados a contener la definición real de la función y tal. Aquí es donde entran en juego los Plugins, Mu-Plugins o los archivos de funciones functions.php
respondido por el kaiser 25.10.2012 - 03:27

Lea otras preguntas en las etiquetas