繁体   English   中英

MVC 4 Razor Jquery Ajax返回JSON.parse()语法错误

[英]MVC 4 Razor Jquery Ajax returns JSON.parse() syntax error

我有一个MVC 4应用程序登录页面,在该页面中,我试图对我的登录控制器使用jquery ajax请求,以查看该用户是否存在。 我的jQuery:

$(document).ready(function () {
        $("#btnSubmit").click(function () {

            var actionUrl = '@Url.Action("Index", "Auth")';
            var username = $("#UserName").val();
            var password = $("#Password").val();
            var jsonString = '[{"username": "' + username + '", "password": "' + password + '"}]';

            $.ajax({
                type: 'POST',
                contentType: 'application/json; charset=utf-8;',
                dataType: 'json',
                url: actionUrl,
                data: jsonString,
                success: function (data) {                        
                    alert(data);
                },
                error: function (xhr, ajaxOptions, thrownError) {                    
                    alert(xhr.status + " - " + thrownError);
                    alert(ajaxOptions);
                }
            });

            return false;
        }); 

我的身份验证操作中的索引控制器:

// POST: /login
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public JsonResult Index(LoginModel model, string returnUrl)
        {                
            return this.Json(String.Empty);                          
        }

我的路线配置:

routes.MapRoute(
                name: "AuthRoot",
                url: "login",
                defaults: new { controller = "Auth", action = "Index", returnUrl = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "AuthRoot2",
                url: "login/{username}/{password}",
                defaults: new { controller = "Auth", action = "Index", returnUrl = UrlParameter.Optional, username = UrlParameter.Optional, password = UrlParameter.Optional }
            );

我不确定这里发生了什么,因为每次生成ajax请求时,on错误位都会运行。 这是firebug的响应标头:

Response Headers
Cache-Control   private
Connection  Close
Content-Length  3835
Content-Type    text/html; charset=utf-8
Date    Tue, 11 Feb 2014 01:51:34 GMT
Server  ASP.NET Development Server/11.0.0.0
X-AspNet-Version    4.0.30319
X-AspNetMvc-Version 4.0

Request Headers
Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Type    application/json; charset=utf-8;
Cookie  __RequestVerificationToken=GqfLsAL26Vo4UM6PiXwON-zGO8M4Y9v1WBA4XQ8tuxDtvPiW7aQy5JKIP85ULQawEoPeB2F0XDSsxd0jsl8braOxMEAkXR1V1LAgdmxBe5iQDy_1qOfX-fjPpebgHgM2Qyq8kv1pa-y4cjfmYhSthw2
Host    localhost:50925
Referer http://localhost:50925/login
User-Agent  Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0
X-Requested-With    XMLHttpRequest

这是我发布的内容:

JSON            

0
    Object { username="manager", password="P@ssw0rd"}

password
    "P@ssw0rd"

username
    "manager"
Source
[{"username": "manager", "password": "P@ssw0rd"}]

当我在控制器上放置一个断点并进行调试时,它永远不会触发,而是收到json.parse语法错误。 我似乎不知道为什么。 我在此网站和其他网站上尝试了许多其他解决方案,但它们似乎对我没有帮助。 我肯定错过了什么。

您应该更改Action方法:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public JsonResult Index(LoginModel model)
    {                
        return this.Json(String.Empty);                          
    }

   or if above not work then use following:
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public JsonResult Index(string username,string password)
    {                
        return this.Json(String.Empty);                          
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM