none
Json no se Carga Bien en un DropDownList RRS feed

  • Pregunta

  • Hola a todos 

    tengo los siguientes datos de un Json que se envió desde el controller...

    [
            {
    		"IdCiudad": 17,
    		"NombreCiudad": "ANZA",
    		"CodigoCiudad": "5044"
    	},
    	{
    		"IdCiudad": 18,
    		"NombreCiudad": "APARTADO",
    		"CodigoCiudad": "5045"
    	},
    	{
    		"IdCiudad": 19,
    		"NombreCiudad": "ARBOLETES",
    		"CodigoCiudad": "5051"
    	},
    ]

    en el codigo ajax tengo lo siguiente...

     $('#Ciudad').find('option').remove();
                    $.ajax({
                        type: "POST",
                        url: '@Url.Action("GetDataCiudades", "GenerarCertificado")',
                        dataType: 'json',
                        data: $('#Ciudad').val(),
                        contentType: 'application/json',
                        success: function (data) {
                            var result = JSON.parse(data);
                            $.each(result, function (index, value) {
                                var option = $('<option value="' + value + '">' + value + '</option>');
                                $('#Ciudad').append(option);
                            });
                        },
                        error: function (data, status, jqXHR) {
                            alert('Error al cargar Ciudades.');
                        }
                    });

    en la linea de código sussces: function(data) el data llega bien el json

    si no hago el JSON.parse me sale el siguiente error

    Cannot use 'in' operator to search for '74806' in 

    pero cuando le coloco  JSON.parse (linea en negrilla) me muestra el Dropdownlist los siguiente

    podrian explicarme CON CODIGO que es el error que sucede?


    • Editado greg_dorian viernes, 16 de diciembre de 2016 3:09
    viernes, 16 de diciembre de 2016 3:06

Respuestas

  • guau resulto lo mas simple del mundo la solucion

    estaba serializando en mi jsonresult

            public async Task<JsonResult> GetDataCiudades()//
            {
                var CiudadesJson = await db.ciudad.ToListAsync();
    
                JavaScriptSerializer jss = new JavaScriptSerializer();
                string resultat_Json = jss.Serialize(CiudadesJson);
    
                return Json(resultat_Json);
            }

    y solo resulto que enviando el to list era lo unico necesario para recibir el json

            public async Task<JsonResult> GetDataCiudades()//
            {
                return Json(await db.ciudad.ToListAsync());
            }

    • Marcado como respuesta greg_dorian viernes, 16 de diciembre de 2016 15:22
    viernes, 16 de diciembre de 2016 15:22

Todas las respuestas

  • Hola greg_dorian,

    Puedes mostrar como envías el Json desde el controlador ?

    Si el resultado es un Json ya no es necesario usar el parse, podrías agregar directamente el resultado al $.each(..) y tomar los valores de las propiedades :

    $.ajax({
        type: "POST",
        url: '@Url.Action("GetDataCiudades", "GenerarCertificado")',
        dataType: 'json',
        data: $('#Ciudad').val(),
        contentType: 'application/json',
        success: function (data) {
            $.each(data, function (index, value) {
                var option = $('<option value="' + value.idCiudad + '">' + value.NombreCiudad + '</option>');
                $('#Ciudad').append(option);
            });
        },
        error: function (data, status, jqXHR) {
            alert('Error al cargar Ciudades.');
        }
    });

    Lo he probado usando el mismo Json que muestras anteriormente y me funciona correctamente.

    Resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 16 de diciembre de 2016 4:13
  • hola joel gracias por tu respuesta pero como lo dije en la pregunta sin el json.parse sale este error

    Cannot use 'in' operator to search for '74806' in 

    realmente el json que coloque son pocas y realmente son 74806 registros... no se si por ser tan grande el json no lo puede leer?

    pero cuando envio la misma cantidad en un viewbag si lo llena

    viernes, 16 de diciembre de 2016 15:00
  • hola

    >>realmente el json que coloque son pocas y realmente son 74806 registros

    pero son pocas o son 74806 ? no queda claro

    si son muchos los items que vas a mostrar entonces no uses un combo, deberias implementar algun control de busqueda tipo autocomplete que limite la cantidad de items que listas para la seleccion

    >>pero cuando envio la misma cantidad en un viewbag si lo llena

    pero no tiene nada que ver,el viewbag se trabaja en el servidor, no involucra ninguna llamada http

    no es comparable el viewbag con una llamada $.ajax

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 16 de diciembre de 2016 15:05
  • guau resulto lo mas simple del mundo la solucion

    estaba serializando en mi jsonresult

            public async Task<JsonResult> GetDataCiudades()//
            {
                var CiudadesJson = await db.ciudad.ToListAsync();
    
                JavaScriptSerializer jss = new JavaScriptSerializer();
                string resultat_Json = jss.Serialize(CiudadesJson);
    
                return Json(resultat_Json);
            }

    y solo resulto que enviando el to list era lo unico necesario para recibir el json

            public async Task<JsonResult> GetDataCiudades()//
            {
                return Json(await db.ciudad.ToListAsync());
            }

    • Marcado como respuesta greg_dorian viernes, 16 de diciembre de 2016 15:22
    viernes, 16 de diciembre de 2016 15:22