[SOLUCIONADO] Ajax html

Buenas, se que lo que estoy pidiendo es bien básico, pero no lo estoy encontrando ni en la doc, ni el el foro. Necesito hacer lo siguiente. Tengo que cargar por AJAX un pedazo de código HTML, un pagelet imagino. Pero no lo estoy pudiendo lograr, cómo debería hacerlo? Saludos!

PD: Estoy trabajando en 3W G3

Hola Pablo, podes buscar lo siguiente dentro del proyecto “kernel.ajax.call” y vas a encontrar montones de ejemplos.

kernel.ajax.call lo que termina haciendo es un $.ajax de Jquery.

Se llama de la siguiente forma:


kernel.ajax.call(url, opciones)

url: es la url donde ira el AJAX
opciones: un objeto JSON con todas las opciones para hacer el AJAX (son las mismas opciones que $.ajax).

Un ejemplo seria:


                      kernel.ajax.call('http://localhost/guarani/3w/operacion/accion', {
                        type: 'POST',
                        data: {
                            dato1: 'valor1',
                            dato2: 'valor2'
                        },
                        success: function(paquete) {
                            $('#mi_div').html(paquete.cont);
                        },
                        error: function() {
                            $('#mi_div').html('Hubo un error');
                        }
                    })

saludos.

Hola Leonel, buenísimo, voy a buscar por ese lado. Tenía más dudas del lado del controlador, como devolver el render de un pagelet en particular. Saludos!

Hola, del lado del controlador podes hacer lo siguiente:

  1. Render de un twig:

function accion__zzzzzzzzzzzzzzzzz()
    {
        $dato1 = $this->validate_param('dato1', 'post', validador::TIPO_TEXTO);
        $dato2 = $this->validate_param('dato2', 'post', validador::TIPO_TEXTO, array('allowempty' => true));        
        
        ..................................

        $datos_twig['dato1'] ='xxxxxxxxxxxxxxxxxx';
        $datos_twig['dato2'] = 'yyyyyyyyyyyyyyyyyy';
        $this->render_template('archivo.twig', $datos_twig);

    }

en el js se accede asi:


                        success: function(paquete) {
                            var contenido_archivo = paquete.cont;
                        }

  1. Render de un pagelet:

function accion__zzzzzzzzzzzzzzzzz()
    {
            ..................................

            $pagelet = $this->vista()->pagelet('nombre_pagelet'); // sin el "pagelet_"
            kernel::renderer()->add($pagelet);

            ..................................

            kernel::renderer()->add_to_ajax_response('hubo_error', $hubo_error); //También se pueden agregar mas datos a la respuesta...
            kernel::renderer()->add_to_ajax_response('mensaje_error', $mensaje_error); //...así cuantos quieras
    }

en el js se accede asi:


                        success: function(paquete) {
                            var contenido_pagelet = paquete.cont;
                            var hubo_error = paquete.hubo_error;
                            var mensaje_error = paquete.mensaje_error;
                        }

saludos.

Buenísimo, era lo que necesitaba, muchas gracias!