JSON请求期间出错

时间:2010-09-27 16:15:27

标签: jquery asp.net-mvc json

我有一个JSON请求,如果在注册过程中已经使用了用户名,则检查服务器。

这是jQuery调用:

// Instant check availability of the username
$("#txtUserName").blur(function() {
    if ($("#txtUserName").val() == "") return;
    $.ajax({
        type: 'post',
        url: '/Login/CheckUserName',
        data: "{userName: '" + $("#txtUserName").val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(message) {
            //Set the spanChecking text letting user know if the uname is available
            if (message.d == true) {
                $("#userNameCheck").css({ "color": "red", "font-weight": "bold", "font-size": "small", "padding-left": "5px" });
                $("#userNameCheck").text("Non disponibile");
            }
            else {
                $("#userNameCheck").css({ "color": "green", "font-weight": "bold", "font-size": "small", "padding-left": "5px" });
                $("#userNameCheck").text("Disponibile");
            }
        },
        error: function(errormessage) {
            //this is just to see if everything is working. Remove before deploy
            $j("#userNameCheck").text(errormessage.responseText);
        }
    });
});

这是将为请求提供服务的控制器操作

[HttpPost]
public JsonResult CheckUserName( string userName ) {
    if ( Membership.GetUser( userName ) == null )
        return Json(false);
    else
        return Json(true);
}

无论如何我不明白为什么我从服务器收到错误500。与Fiddler一起看,我可以看到RAW请求是

POST http://localhost:1037/Login/CheckUserName HTTP/1.1
Host: localhost:1037
Connection: keep-alive
Referer: http://localhost:1037/Login/Register
Content-Length: 22
Origin: http://localhost:1037
X-Requested-With: XMLHttpRequest
Content-Type: application/json; charset=UTF-8
Accept: application/json, text/javascript, */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3
Accept-Encoding: gzip,deflate,sdch
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

{userName: 'sampleuser'}

但控制器Action接收userName的null参数。我通过Fiddler看到了这一点,甚至在代码上设置了一个断点。

我在哪里做错了?

修改

返回给客户端的错误是

The value cannot be null. Parameter name: username

请注意,错误中的参数名称不保留原始案例。这是会员提供者的行为还是应该降低参数的大小写?

4 个答案:

答案 0 :(得分:2)

此:

{userName: 'sampleuser'}

...是无效的JSON。这可能是你想要的:

{"userName": "sampleuser"}

有关JSON格式的详细信息,请参阅RFC

答案 1 :(得分:1)

请尝试在您的通话中使用此格式代替data参数:

data: "userName=" + $("#txtUserName").val()

答案 2 :(得分:0)

你检查了路由,特别是大写吗?

发布此次通话的路线,可能还有什么东西?

答案 3 :(得分:0)

您正在以JSON身份发送请求,但服务器中没有任何内容可以理解或预期此格式。您有一个控制器操作,期望application/x-www-form-urlencoded内容类型。试试这个:

data: { userName: $('#txtUserName').val() },
contentType: 'application/x-www-form-urlencoded',

这样做的好处是可以正确地对发送到服务器的参数进行url编码,而这些参数在你的版本中没有使用字符串连接。