Aplicación .net mvc 4: llamada de ajax a una función en el controlador

Estoy creando la aplicación mvc 4 donde llamo una función en el controlador desde un archivo js usando ajax.

Cuando llamo a la función desde ajax, está llamando a la función respectiva correctamente. Pero ni el éxito ni la función de error no se disparan. ¿Podría alguien ayudarme a corregir mi error?

Me gustaría leer los datos de la base de datos, convertirlos a formato json y escribirlos en un archivo .js y, posteriormente, activar la función de éxito. Ayúdame a resolver esto. Gracias por adelantado.

Aquí está mi código.

$.ajax({ //url: '@Url.Action("getJsonData","Home")', url: "Home/getJsonHugeData1", //data: "{}", type: "GET", //contentType: 'application/json', //dataType: "json", success: function () { alert(); alert('success getJsonHugeData'); loaddata(data); }, error:function(){ alert('error'); } }); 

Controlador:

 public JsonResult getJsonHugeData() { var users = GetUsersHugeData(); string json = "var dataSource="; json += JsonConvert.SerializeObject(users.ToArray()); System.IO.File.WriteAllText(Server.MapPath("/Scripts/NewData.js"), json); return Json(users, JsonRequestBehavior.AllowGet); } private List GetUsersHugeData() { var usersList = new List(); UserModel user; List data = new List(); using (Database1Entities dataEntity = new Database1Entities()) { data = dataEntity.dummyDatas.ToList(); } for (int i = 0; i < data.Count; i++) { user = new UserModel { ID = data[i].Id, ProductName = data[i].ProductName, Revenue = data[i].Revenue, InYear = data[i].InYear.Year }; usersList.Add(user); } } 

Creo que su navegador bloqueará el archivo descargado a través de ajax, esto se debe a que JavaScript no puede interactuar con el disco. Si desea que esto funcione, deberá hacerlo utilizando un formulario de publicación.

 @using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { id = "DownloadForm" })) { ... form data would be here if you had any...  } 

Luego, devolverá un FileStreamResult con el contenido del archivo que se descargará.

 public ActionResult Action(FormModel model) { // Do work to get data for file and then return your file result to the browser. return new FileStreamResult(new MemoryStream(fileData), "text/csv") // set the document type that is valid for your file { FileDownloadName = "users.csv" }; } 

Ejecuté todo tu código, excepto lo siguiente, ya que no proporcionaste las clases UserModel y dummydata en tu pregunta:

 private List GetUsersHugeData() { var usersList = new List(); UserModel user; List data = new List(); using (Database1Entities dataEntity = new Database1Entities()) { data = dataEntity.dummyDatas.ToList(); } for (int i = 0; i < data.Count; i++) { user = new UserModel { ID = data[i].Id, ProductName = data[i].ProductName, Revenue = data[i].Revenue, InYear = data[i].InYear.Year }; usersList.Add(user); } } 

El resultado final fue que tenía un error tipográfico en el parámetro 'url' de ajax. Además, si va a verificar errores, configure su función en

 function(jqxhr, status, error) { alert(error); } 

para comprobar el error que se está lanzando.