2013-05-07 123 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的東西

相關問題