2009-09-23 30 views
6

Estoy aprendiendo asp.net mvc trabajando en un proyecto de prueba que incluye SubSonic y jQuery.getJSON Callback Not Firing

El problema que estoy encontrando es que cada vez que quiero devolver algo más que una cadena simple, como un objeto Json, me da problemas porque las devoluciones de llamada no parecen disparar, o vuelven como fallidas.

Mi método para obtener una lista de puestos de trabajo en la base de datos:

[AcceptVerbs(HttpVerbs.Get)] 
    public JsonResult GetAllJobs() 
    { 
     var db = new JamesTestDB(); 
     var jobs = from job in db.Jobs 
        select job; 

     return Json(jobs.ToList()); 
    } 

Y mi JavaScript para llamarlo:

function updateJobList() { 
     var url = '<%= Url.Action("GetAllJobs", "Home") %>'; 

     $.getJSON(url, null, function(data, status) { alert("Success!"); }); 
    } 

He jugado un poco con get, correos y getJSON utilizando tanto definiciones de función en línea y fuera de éxito y fracaso. Nada parece funcionar, pero el código definitivamente está haciendo la llamada de Ajax, simplemente no dispara la devolución de llamada.

+0

¿se trata de un dominio cruzado getJSON (es decir, JSONP) o del mismo dominio? – seth

Respuesta

0

jQuery tiene una error handler que usted tiene que unen si desea ver los errores:

$("#msg").ajaxError(function(event, request, settings){ 
    $(this).append("<li>Error requesting page " + settings.url + "</li>"); 
}); 
0

has necesitado:

$ .getJSON (url, la función (datos, estado de alerta() { "¡Éxito!");});

y también, compruebe la URL se resuelven correctamente haciendo:

alerta (url);

antes de la llamada para verificar que sea correcta.

A continuación, compruebe la respuesta en la ventana de la consola de Firebug en Firefox.

0

El problema está en algún lugar de lo que estoy devolviendo. Parece que empujar tipos anónimos en Json() parece causar un error de alguna manera. Al definir una clase simple y al introducir valores en una nueva instancia de la misma, conseguí que regresara correctamente.

12

¡Aquí está la solución!

Así que resulta que había estado haciendo el exacto la misma manera durante más de un año:

public JsonResult SaveData(string userID, string content) 
{ 
    var result = new { Message = "Success!!" }; 

    return Json(result); 
} 

Así, empecé a hacerlo de la misma forma en un nuevo proyecto que puso en marcha. Bueno, la diferencia? El primero fue MVC 1.0 y el nuevo MVC 2.0. Entonces, ¿cuál es la diferencia? Debe permitir solicitudes JSON GET:

public JsonResult SaveData(string userID, string content) 
{ 
    var result = new { Message = "Success!!" }; 

    return Json(result, JsonRequestBehavior.AllowGet); 
}