entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Pagina bloaqueda al rellenar select con AJAX

Hola:

Tengo un formulario de registro de una aplicación en Symfony que cuando tu seleccionas la provincia te rellena el select de ciudades con las ciudades de esa provincia.

Aqui os dejo el codigo de que rellena las ciudades:

<script>
        $("#fos_user_registration_form_state").change(function () {
            $('#alertCities').show();
            var state = $("#fos_user_registration_form_state").val();
            var url = '{{ path('ajaxCitiesList',{'state':'stateValue'}) }}';
            url = url.replace("stateValue", state);
            $.get( url, function( cities ) {
                $('#fos_user_registration_form_city').empty();
                for ( var i = 0 ; i <= cities.length; i++ ) {
                    $("#fos_user_registration_form_city").append(
                            $('<option>', {
                                value: cities[i].id,
                                text : cities[i].name
                            }));
                }
                $('#alertCities').hide();

            });
        });
    </script>

y esta es la acción que genera el listado:

/**
     * @Route("ajax-update-cities-list-{state}" , name="ajaxCitiesList" )
     */
    public function ajaxCitiesListAction($state)
    {
        $em = $this->getDoctrine()->getManager();

        $cities = $em->getRepository('CerooneAppBundle:Cities')->findByState($state);

        return new JsonResponse($this->get('jms_serializer')->toArray($cities));

    }

La cuestion es que en Firefox me funciona, pero en Chrome, la primera vez que hago la consulta se queda bloqueado demasiado tiempo, pero las otras veces ya funciona bien. En las versiones moviles tanto con Firefox como con Chrome, se queda bloqueado.

Os dejo el enlace del formulario para que podais probar:

Colectiva.org/registro

2 Respuestas

2votos

angelAparicio Puntos2810

Hola, la consola de javascript me indica que "id is undefined" en esta línea:
237: value: cities[i].id,

Veo que la url la generas reemplazando stateValue, por el código de la provincia. Y que llamando a la url sin hacer el reemplazo, devuelve un array vacío, lo que explicaría el error de "id is undefined":
http://intranet.colectiva.org/intranet/ajax-update-cities-list-stateValue

Por lo que supongo que ese reemplazo la primera vez no lo hace bien, pero si la segunda. Puedes ser que la primera vez el script se ejecute sin que se haya cargado todo el DOM. ¿Podrías poner el código jquery dentro de un $(document).ready, a ver si es eso?
http://www.learningjquery.com/2006/09/introducing-document-ready

Si no es eso, ¿podrías poner un console.log(url); antes de la llamada ajax, para ver a que url está llamando en cada momento?

Ángel

0voto

Carlos Gude Puntos360

Al final no era nada de eso. Al parecer el bloquea era por vaciar el select con las ciudades.

Al final lo solucione, haciendo que antes de cargar las ciudades, eliminaser el select y lo volviese a crear.

Es una solucion temporal, pero no me funcionaba otra cosa.

0voto

Peter comentado

No estaría de más que edites esta respuesta, pongas el código de solución y selecciones la respuesta como correcta.

Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta