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

时间:2011-10-11 21:04:23

标签: asp.net-mvc-3 jquery

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

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" });
    }

3 个答案:

答案 0 :(得分:2)

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

url: '/Home/Subscribe'

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

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

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

答案 1 :(得分:2)

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

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);
    }
});

答案 2 :(得分:2)

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