2011-09-26 20 views
6

Soy un principiante en Symfony (versión 2), tengo un proyecto logrado con PHP básico simple, y ahora estoy rehaciendo mis páginas al tratar con el framework Symfony, y llegué a mi jquery ajax funciones, sin duda, las cosas van a ser diferentes, que solía hacer la siguiente manera:Ajax y Jquery en Symfony

$("#div").click(function(){ 
    $.post("targetFile.php",{/*parameters*/,function(data){ }); 
}); 

Q: ¿Cómo hacer que funcione en Symfony? ¿Qué poner en lugar de targetFile.php? una ruta muy probablemente y qué hacer en los lados del controlador y del enrutador? Miré en Google y aquí, pero no obtuve ninguna respuesta clara. Saludos.

+0

¿con qué estás teniendo problemas? – JamesHalsall

+0

¿Cómo hacer que una función Jquery Ajax funcione en Symfony? –

Respuesta

4

Si se establece dentro de este routing.yml:

_admin_ajax: 
    resource: "@SomethingAdminBundle/Controller/AjaxController.php" 
    type:  annotation 
    prefix: /admin/ajax 

... y en el interior del tha controlador va a manejar esta llamada AJAX:

/** 
* @Route("/ajaxhandler", name="_admin_ajax_handler") 
*/ 
public function handlerAction() { 

    $isAjax = $this->get('Request')->isXMLHttpRequest(); 
    if ($isAjax) { 
     //... 
     return new Response('This is ajax response'); 
    } 
    return new Response('This is not ajax!', 400); 
} 

... entonces en el interior, por ejemplo, la plantilla se RAMITA debería llamarlo así:

$("#div").click(function(){ 
    $.post("{{ url('_admin_items_add') }}",{/*parameters*/,function(data){ }); 
}); 

... y la ruta real para su acción se generará con la creación de plantillas motor.

+0

Bueno, lo intentaré, pero ¿y si la plantilla es un archivo php? qué poner como url –

+0

Agregando que resolvió el problema: '$ isAjax = $ this-> get ('Request') -> isXMLHttpRequest();' realmente no entiendo la lógica de Symfony :), de cualquier forma, gracias, agradezco su apoyo bro . –

+0

Y también puede afectar el borrado de caché, no puedo decir que sea la solución porque siempre estaba borrando el caché cada vez que cambio algo. –

5

Usted realmente solo tiene que reemplazar el archivoFile.php por una ruta personalizada suya.

Así que si usted tiene esto en su routing.yml:

# app/config/routing.yml 
hello: 
    pattern:  /ajax/target 
    defaults:  { _controller: AcmeHelloBundle:Site:index } 

Se puede usar esta javascript:

$("#div").click(function(){ 
    $.post("/ajax/target",{/*parameters*/,function(data){ }); 
}); 

En el lado de Symfony2, el método de la indexAction SiteController de la voluntad AcmeHelloBundle ser llamado.

+0

mira lo que Firebug me dice: No encontrado La URL/objetivo solicitado no se encontró en este servidor. mientras que mi enrutador es: 'target: patrón:/predeterminado de destino: {_controller: WWBundle: Default: target}' y mi Javascript es '$ (" # div "). click (function() {$ .post ("/target ", {/ * parameters * /, function (data) {});});' y el controlador es 'public function targetAction() {return $ this-> render ('WWBundle: Default: target.html.php'); } '¿Qué pasa Sr. Damien? –

+0

intenté borrar su caché? – JamesHalsall

+0

Sí, lo hice, pero sigo recibiendo este mensaje: "Error de red: 404 no encontrado - http: // localhost/target". –