Pregunta

En mi proyecto ASP.net mvc3, utilizo una llamada ajax para enviar datos json a un método de acción de creación en la empresa controladora.Pero cuando depuro la llamada ajax, siempre termina en un resultado de error en lugar de un resultado exitoso.

llamada ajax:

$.ajax({
            url: '/Company/Create',
            type: 'POST',
            data: JSON.stringify(CreateCompany),
            dataType: 'Json',
            contentType: 'application/json; charset=utf-8',
            success: function () {
                alert('ajax call successful');
            },
            error: function () {
                alert('ajax call not successful');
            }
        });

Mi método de acción en el controlador de la empresa:

    [HttpPost]
    public ActionResult Create (Company company)
    {
        try
        {
            //Create company
            CompanyRepo.Create(company);
            return null;
        }
        catch
        {
            return View("Error");
        }
    }

Ya depuré el método de acción, pero él lo completa como debería.Entonces, los datos enviados con la llamada ajax serán manejados y escritos en la base de datos.(El método de acción no utiliza la parte catch).

¿Por qué mi llamada ajax todavía muestra el mensaje "la llamada ajax no fue exitosa"?

¿Fue útil?

Solución

Solía ​​​​tener el mismo problema al recuperar el resultado JSON.Lo que hice es establecer el tipo de datos en "Text JSON" :)) Si esto no ayuda a intentar obtener información adicional adquiriendo detalles de su error, es decir:

$.ajax({
        url: '/Company/Create',
        type: 'POST',
        data: JSON.stringify(CreateCompany),
        dataType: 'text json',
        contentType: 'application/json; charset=utf-8',
        success: function () {
            alert('ajax call successful');
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
        }
    });

POR CIERTO:Encontré esta solución en algún lugar de StackOverflow

Otros consejos

¿Por qué estás regresando? null ¿En caso de éxito en la acción de su controlador? Devolver algo al éxito como, por ejemplo, un objeto JSON (especialmente como indicó en su solicitud AJAX que espera la respuesta JSON del servidor, utilizando el dataType: 'json' configuración - que debe ser en minúsculas j de paso):

return Json(new { success = true });

¿No sería esto más fácil?

$.post("/Company/Create", function (d) {
    if (d.Success) {
        alert("Yay!");
    } else {
        alert("Aww...");
    }
}, "json");

Y en tu controlador.

[HttpPost]
public JsonResult Create(
    [Bind(...)] Company Company) { <- Should be binding
    if (this.ModelState.IsValid) { <- Should be checking the model state if its valid
        CompanyRepo.Create(Company);

        return this.Json(new {
            Success = true
        });
    };

    return this.Json(new {
        Success = false
    });
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top