从控制器返回Json,从未成功

我使用以下代码成功发布到我的控制器,但是,成功永远不会被命中只有错误。 我究竟做错了什么?

JS:

$.ajax({ url: '/Home/Subscribe', type: 'POST', dataType: 'json', data: { email: $('#sube').val() }, success: function (data) { // get the result and do some magic with it alert(data.foo); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); 

控制器:

 [HttpPost] public JsonResult Subscribe(string email) { return Json(new { foo = "bar", baz = "Blech" }); } 

在IE中,按F12打开开发人员工具。 转到“网络”选项卡,然后单击“启动Profiler”。 向您的订阅操作发送请求 – 在下面的列表中,您将看到已发送请求和返回状态代码的详细信息。 双击请求查看详细信息 – 然后您可以查看响应的正文。 如果请求因服务器错误而失败,您将在响应正文中看到该错误。

我看到你的代码有一个错误的地方就是你已经硬编码了url:

 url: '/Home/Subscribe' 

你永远不应该这样做。 在ASP.NET MVC应用程序中生成URL时,应始终使用URL帮助程序:

 url: '@Url.Action("Subscribe", "Home")' 

此外,您说错误回调总是被命中,但是当您尝试分析AJAX请求时,您没有说出您在FireBug或Chrome Developer工具栏中观察到的内容。 如果你这样做了,你就会看到请求失败的确切原因,因为你会看到发送给服务器的请求以及服务器发送回客户端的响应。

以下是我的jQuery ajax片段。 你的控制器看起来正确 我假设您已经validation它实际上是通过使用断点调用的。

 var p = { email: $('#sube').val() }; $.ajax({ url: '@Url.Action("Subscribe", "Home")' type: 'POST', data: JSON.stringify(p), dataType: "text json", contentType: "application/json", success: function (data) { // get the result and do some magic with it alert(data.foo); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } });