无法将数据从jquery发送到c#服务器

时间:2013-05-07 09:19:43

标签: c# asp.net ajax json web

尝试对正确的输入和服务器验证进行jquery验证,以检查是否存在用户/电子邮件。唯一的问题是,即使在通过jquery验证之后,由于某种原因,并不总是从客户端发送参数。 尝试在服务器端方法的开头输入断点,很少进入那里,在向params插入数据后发出警报并看到json看起来没问题。 即时通讯使用Jquery,asp.net,c#。

客户代码:

var user = $("#txt_register_username").val();
            var password = $("#txt_register_password").val();
            var firstname = $("#txt_register_firstname").val();
            var lastname = $("#txt_register_lastname").val();
            var birthdate = $("#txt_register_birthdate").val();
            var picture = $("#txt_register_picture").val();
            var car = $("#txt_register_car").val();
            var email = $("#txt_register_email").val();
            var home = $("#txt_register_home").val();
            var cell = $("#txt_register_cell").val();
            var params = "{username:" + user
            + ",firstname:" + firstname
            + ",lastname:" + lastname
            + ",birthdate:" + birthdate
            + ",pic:123"
            + ",carowned:" + car
            + ",email:" + email
            + ",password:" + password
            + ",home:" + home
            + ",cell:" + cell
            + "}";
            $.ajax
            ({
                type: "POST",
                url: "Register.aspx/AddUser",
                data: params,
                contentType: "application/json; charset=utf-8",
                dateType: "json",
                success: function (result) {
                    alert(result.d);

                }
            });

pic稍后将是二进制的,所以它只是暂时的,忽略它作为字符串。

服务器代码:

[WebMethod]
        public static string AddUser(string username, string firstname, string lastname, string birthdate, string pic, string carowned, string email, string password, string home, string cell)
        {
            DataSet1TableAdapters.UsersTableAdapter userAdapter = new DataSet1TableAdapters.UsersTableAdapter();
            DataSet1.UsersDataTable userTable = new DataSet1.UsersDataTable();
            userAdapter.Fill(userTable);
            int index = 0;
            Console.WriteLine("entering valiation area");
            foreach (DataRow dr in userTable.Rows)
            {
                if (userTable.Rows[index]["username"].Equals(username))
                {
                    Console.WriteLine("a user who already exists tried to create an account");
                    return "user already exists with that username";        
                }
                if (userTable.Rows[index]["email"].Equals(email))
                {
                    Console.WriteLine("a user who already exists with an email tried to create an account");
                    return "user already exists with that email";
                }
                index++;
            }
            try
            {
                userAdapter.Insert(username, firstname, lastname, birthdate, pic, carowned, email, password, home, cell);
                Console.WriteLine("new user added to db");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                return "oops , something went wrong.";
            }
            return "new user added to database.";

        }

5 个答案:

答案 0 :(得分:4)

试;

var params = JSON.stringify({
             username:user,
            firstname :firstname,
            lastname:lastname,
            birthdate: birthdate,
            pic:123,
            carowned:car,
            email:email,
            password: password,
            home: home,
            cell: cell
           });

答案 1 :(得分:1)

尝试切换到这种语法:

var params = {"username" : user,
              "firstname" : firstname
              ....
             };

jQuery的数据需要一个json对象解析为服务器变量。

答案 2 :(得分:0)

您应该在json对象中发送数据,但是您将其作为字符串发送! 将语法切换为以下内容:

var params = {username: + user
            ,firstname: + firstname
            ,lastname: + lastname
            ,birthdate: + birthdate
            ,pic:123
            ,carowned: + car
            ,email: + email
            ,password: + password
            ,home: + home
            ,cell: + cell
            };

修改 如果我是你,我会删除dataType属性以查看它是如何工作的!

答案 3 :(得分:0)

这是因为您的AJAX调用是“POST”,而不是“GET”,因此参数的处理方式不同。

您需要以下内容:

var data = $.toJSON(params);

然后使用AJAX请求发送data对象,而不是params

答案 4 :(得分:0)

正如Jeremy所说,你的JSON不正确

它必须是这样的 {“username”:“user”,               “firstname”:“firstname”               ....              }

下载fiddler,你将能够看到你遇到了什么问题,然后你就可以通过JSONLint.com获取发布的json,这将告诉你为什么你的json形成不正确。

也可以获得json2.js,然后你可以做dotnet dreamer向你展示的内容,stringify可能会内置到一些较新的浏览器中,想想firefox有它,但是像ie8及以下的旧浏览器没有,它现在可能是内置到jquery所以我先检查,最近没有做太多的ajax东西