2013-05-07 86 views
0

一直在尝试对正确的输入和服务器验证进行jquery验证,以检查用户/电子邮件是否存在。唯一的问题是参数并不总是从客户端发送出于某种原因,即使这通过了jQuery验证。 尝试在服务器端方法的开始处输入中断点,很少进入那里,在将参数插入参数后看到json看起来好了就放置了警报。 即时通讯使用jquery,asp.net,c#。无法将数据从jquery发送到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."; 

     } 
+0

你会得到什么错误。显示错误? – 2013-05-07 09:31:58

+0

显示你的按钮和jQuery代码(按钮点击) – 2013-05-07 09:35:56

回答

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 
      }); 
+0

它的工作。 thx :) – 2013-05-07 09:40:59

+0

高兴地帮助:D – 2013-05-07 09:41:16

+0

1个更多的问题,尝试了两次后,我在userAdapter.Fill(userTable)的行服务器端出现错误,它说ConstraintExepetion是由用户未处理...和所有我的领域是好的,没有空... – 2013-05-07 09:49:05

1

尝试切换到这句法:

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

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

+0

nop..doesnt帮助。我可以用我的语法创建几个帐户,但可能有一个exeption或一些阻止我发送数据..我不使用任何/:',或类似的东西。 – 2013-05-07 09:26:49

+0

我只注意到你有“dateType”而不是“dataType”。不知道这是否是原因,但可能不会修复。 – 2013-05-08 00:56:39

0

你应该发送你的数据在json对象中,但你发送它作为一个字符串! 你的语法切换到这样的事情:

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

编辑: 如果我是你,我会删除数据类型属性,看看它是如何工作!

+0

注册按钮甚至不执行...我认为视觉工作室不熟悉这一点。 – 2013-05-07 09:34:05

+0

为什么'+'在变量 – 2013-05-07 09:35:01

+0

@OriGavrielRefael之间,尝试'CauseValidation'为false(的按钮) – 2013-05-07 09:35:29

0

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

你需要的东西,如:

var data = $.toJSON(params); 

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

+0

注册按钮甚至不执行 – 2013-05-07 09:37:16

0

杰里米提到你的JSON是不正确

它需要这样的 { “用户名”: “用户”, “名字”: “名字” .... }

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

也得到json2.js,然后你可以做什么dotnet梦想家已经显示你,stringify可能内置到一些新的浏览器,认为Firefox有它,但ie8和以下的旧浏览器不会,现在可能被内置到jquery中,所以我会先检查,最近没有做太多的Ajax的东西

相关问题