Valor del objeto Json MVC3 en Javascript
Frecuentes
Visto 832 veces
1
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.
4 Respuestas
0
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
0
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
0
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
0
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 javascript json asp.net-mvc-3 or haz tu propia pregunta.
bueno, podrías usar console.log(data) y mirar lo que contiene el objeto. - Risto Novik