0

一直在尝试为正确的输入和服务器验证进行 jquery 验证,以检查用户/电子邮件是否存在。唯一的问题是,即使通过了 jquery 验证,由于某种原因,参数并不总是从客户端发送。尝试在服务器端方法的开头输入断点,很少进入那里,将数据插入参数后发出警报并看到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);

                }
            });

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

服务器代码:

[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.";

        }
4

5 回答 5

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
           });
于 2013-05-07T09:28:55.240 回答
1

尝试切换到这种语法:

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

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

于 2013-05-07T09:23:08.887 回答
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 属性,看看它是如何工作的!

于 2013-05-07T09:27:40.810 回答
0

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

你需要类似的东西:

var data = $.toJSON(params);

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

于 2013-05-07T09:28:51.203 回答
0

正如杰里米所说,您的 JSON 不正确

它需要是这样的 {"username" : "user", "firstname" : "firstname" .... }

下载 fiddler,您将能够看到您遇到了什么问题,然后您将能够获取发布的 json 并通过 JSONLint.com 运行它,这将告诉您为什么您的 json 格式不正确。

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

于 2013-05-07T09:42:37.960 回答