【问题标题】:jquery $.ajax function in mvc3mvc3 中的 jquery $.ajax 函数
【发布时间】:2014-03-15 01:49:59
【问题描述】:

我是 MVC3 .NET 的新手。 我想使用 jquery ajax 功能登录。我在这个网站上阅读了一些解决方案。但是当我使用这些方法并编写我的代码时,它有一个错误。 ajax代码如下:

$(document).ready(function () {
$('#loginBut').click(function (e) {
    var username = $('#username').val();
    var password = $('#password').val();
    $.ajax({
        url: '/Admin/Login',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        data: {login: username, key:password},            
        success: function (msg) {
            alert("username : " + msg.username);
        }                
    });
    $('#loginBut').blur();
});
});

我的登录方法是这样的:

public class AdminController : Controller
{
    //
    // GET: /Admin/

    public ActionResult Index()
    {            
        return View();
    }

    public ActionResult Login(string login, string key)
    {
        return Json(new { username = login, password = key});
    }

}

脚本链接到页面。但在运行和发送数据后我有这个错误:

Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://localhost:1431/Admin/Login

【问题讨论】:

  • 我很惊讶你得到了 500,它应该是 404,因为你的操作没有用 HttpPost 注释并且你正在发送一个 Post 请求

标签: jquery ajax asp.net-mvc-3


【解决方案1】:

您的控制器操作仅适用于 GET 请求,并且您正在发送 POST。用 [HttpPost] 注释它:

[HttpPost]
public ActionResult Login(string login, string key)

还有数据:在 $.ajax 中不应该是对象,您将 application/json 指定为内容类型,default behavior 是将对象转换为 form-urlencoded。要使用 json 将其转换为 json 字符串

data: JSON.stringify({login: username, key:password})

【讨论】:

    【解决方案2】:

    500 错误意味着,您的代码遇到了一些运行时错误。您可以使用 firebug 检查来自服务器页面的完整响应。

    您应该使用JSON.stringify 方法将您的对象转换为 JSON 格式

    $.ajax({
        url: '@Url.Action("Home","Login")',
        type: 'POST',
        contentType: 'application/json',              
        data:JSON.stringify({ login: username, key: password }),
        success: function (msg) {
            alert("username : " + msg.username);
        }
    });
    

    或者像这样发送真正的 JSON 数据

    $.ajax({
         url: '@Url.Action("Home","Login")',
        type: 'POST',
        data: {"login":username,"key":password},
        success: function (msg) {
            alert("username : " + msg.username);
        }
    });
    

    如果您从 GET 操作方法返回 JSON 数据,您需要提及 JsonRequestBehaviour.AllowGet,它指定是否允许来自客户端的 HTTP GET 请求。

    http://msdn.microsoft.com/en-us/library/system.web.mvc.jsonrequestbehavior(v=vs.118).aspx

    return Json(new { username = login, password = key},
                                                     JsonRequestBehaviour.AllowGet);
    

    或使用HttpPost 属性标记您的操作方法。

    [HttpPost]
    public ActionResult Login(string login, string key)
    {
        //to do :return something/redirect
    }
    

    在登录的情况下,始终使用 HttpPost 修饰的操作方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多