Valor del objeto Json MVC3 en Javascript

Estoy enviando la lista json desde mi controlador:

 public ActionResult LoadTree()
        {

            List<ListItem> list = new List<ListItem>() {
                new ListItem() { Text = "Keyvan Nayyeri" },
                new ListItem() { Text = "Simone Chiaretta" },
                new ListItem() { Text = "Scott Guthrie" },
                new ListItem() { Text = "Scott Hanselman" },
                new ListItem() { Text = "Phil Haack" },
                new ListItem() { Text = "Rob Conery" }
            };

            return new JsonResult { Data = list };
        }

Tratando de obtener la lista en mi vista usando:

var text =
            $.ajax({
                url: '/CourseCases/LoadTree',
                dataType: 'json',
                 data: {     },
                cache: false,
                type: 'GET',
                success: function (data) {

                }
            });
            alert(text);

Acabo de recibir [objeto objeto]. ¿Cómo puedo obtener el valor real del objeto? Gracias por adelantado.

preguntado el 22 de mayo de 12 a las 08:05

bueno, podrías usar console.log(data) y mirar lo que contiene el objeto. -

4 Respuestas

Primero tienes que configurar el JsonRequestBehavior = JsonRequestBehavior.AllowGet en la JsonResult.

    public ActionResult LoadTree()
    {
      List<ListItem> list = new List<ListItem>() {
                new ListItem() { Text = "Keyvan Nayyeri" },
                new ListItem() { Text = "Simone Chiaretta" },
                new ListItem() { Text = "Scott Guthrie" },
                new ListItem() { Text = "Scott Hanselman" },
                new ListItem() { Text = "Phil Haack" },
                new ListItem() { Text = "Rob Conery" }
            };

      return new JsonResult { Data = list, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

    <script type="text/javascript">
      $.ajax({
        url: '/Home/LoadTree',
        dataType: 'json',
        data: {},
        cache: false,
        type: 'GET',
        success: function (data) {
          alert(data.length); // 6
          // do whatever with the data
        }
      });
    </script>

contestado el 22 de mayo de 12 a las 15:05

Muchas gracias Mark por proporcionar una respuesta completa, funcionó. - hcl

en la función de éxito, debe analizar json para obtener datos reales, por ejemplo

var jsObject = JSON.parse(data);

y luego acceda a cada elemento como jsObject.List[0].Text, etc.

contestado el 22 de mayo de 12 a las 08:05

Esto no es necesario: especificar el tipo de datos: 'json' en la solicitud hace que jQuery analice el resultado y le proporcione un objeto javascript en los datos. - Archil

le dará el objeto y luego podrá obtener información de él, ya que ha colocado su lista en Datos para que pueda acceder iterando a través de la lista jsObject.Data.List[0].Text - Tanveer

Problema simple aquí. En su controlador, en realidad está asignando la lista a una variable llamada Data dentro la recogida de datos de respuesta. Solo porque su función de éxito toma un data parámetro no significa que el Data valor que establece en su controlador automágicamente se convertirá en el data variable.

A medida que tus Data la lista es dentro el data objeto: necesitas hacer:

data.Data

dentro de su función de éxito. Prueba esto:

success: function(data) {
    alert(data.Data.length);
}

contestado el 22 de mayo de 12 a las 08:05

function $.ajax() no devuelve valor del servidor, asi que var text = $.ajax() no trabajará. En su lugar, debe mirar el controlador de éxito

success: function (data) {
    // data is the result of your ajax request
}

Le recomiendo encarecidamente que lea más en jQuery.Ajax

éxito (datos, estado de texto, jqXHR) Una función que se llamará si la solicitud tiene éxito. A la función se le pasan tres argumentos: los datos devueltos por el servidor, formateados de acuerdo con el parámetro dataType; una cadena que describe el estado; y el objeto jqXHR (en jQuery 1.4.x, XMLHttpRequest). A partir de jQuery 1.5, la configuración de éxito puede aceptar una variedad de funciones. Cada función será llamada a su vez. Este es un evento de Ajax.

contestado el 22 de mayo de 12 a las 08:05

"Hacer" success: function (data) está perfectamente bien, ¿solo usa los otros dos argumentos si los necesitas? - mattytommo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.