2011-10-11 57 views
2

我成功发布到我的控制器与下面的代码,但是,成功永远不会被命中唯一的错误。我究竟做错了什么?从控制器返回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" }); 
    } 

回答

2

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

2

我与你的代码中看到一个错误的事情是,你必须硬编码的网址:

url: '/Home/Subscribe' 

你永远不应该这样做。你应该总是使用URL佣工生成一个ASP.NET MVC应用程序的URL时:你说

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

也是错误回调总是被击中,但你没有说你在Firebug或Chrome开发者工具栏观察到的东西当你试图分析AJAX请求时。如果你这样做了,你会看到请求失败的确切原因,因为你会看到向服务器发送了什么请求以及服务器将什么响应发送回客户端。

+0

谢谢Darin,我会用你的方法。 – jr3

+0

达林 - 跟进,你将如何解决从JavaScript文件内的URL? – jr3

+0

@Jreeter,你是什么意思?你为什么想要从JavaScript解析URL? –

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