2013-05-07 2 views
0

пытается выполнить проверку правильности ввода и проверки сервера, чтобы проверить, существует ли пользователь/электронная почта. только проблема в том, что параметры не всегда отправляются с клиентской стороны по какой-либо причине даже после того, как это проходит проверку 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

какая ошибка вы получаете. показать ошибку? –

+0

покажите свою кнопку и код jQuery (нажмите кнопку) –

ответ

4

try;

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 :) –

+0

рад помочь: D –

+0

Еще один вопрос, после того как вы пытаетесь сделать это несколько раз, получая ошибку на стороне сервера в строке userAdapter.Fill (userTable), и он говорит, что ConstraintExepetion был необработанным пользователем ... и все мои поля хороши, ничего нет. –

1

переключение Попробуйте этот синтаксис:

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

данных Jquery ожидает объект JSON для синтаксического анализа в серверные переменные.

+0

nop..doesnt help. я мог бы создать несколько учетных записей с моим синтаксисом, но, вероятно, существует исключение или что-то, что мешает мне отправлять данные .. im не использует никаких /: 'или что-то в этом роде. –

+0

Я только заметил, что у вас есть «dateType» вместо «dataType». Не знаю, если это причина, но, вероятно, не помешает исправить. –

0

Вы должны отправить свои данные в объект json, но вы отправляете его как строку! Переключите синтаксис что-то вроде этого:

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

Edit: Если бы я тебя, я бы удалить DATATYPE свойство, чтобы увидеть, как это работает!

+0

кнопка регистрации даже не выполняется ... я думаю, что визуальная студия не знакома с этим. –

+0

почему '+' между переменной –

+0

@OriGavrielRefael, попробуйте 'CauseValidation' до false (от кнопки) –

0

Это связано с тем, что ваш вызов AJAX является «POST», а не «GET», поэтому параметры обрабатываются по-разному.

Вам нужно что-то вроде:

var data = $.toJSON(params); 

затем отправить data объект с запросом AJAX, а не params.

+0

кнопка регистрации даже не выполняет –

0

Как Джереми упоминается ваш JSON неверен

это должно быть что-то вроде этого { "имя пользователя": "пользователь", "FirstName": "Имя" .... }

скачайте fiddler, и вы сможете узнать, какую проблему вы хотите получить, тогда вы сможете взять отправленный json и запустить его через JSONLint.com, который расскажет вам, почему ваш json сформирован неправильно.

Также вы можете получить json2.js, а затем вы можете сделать то, что показало вам сноуборд dotnet, stringify может быть встроен в некоторые из новых браузеров, думаю, что firefox имеет его, но старые браузеры, такие как ie8 и ниже, теперь нет быть встроенным в jquery, поэтому я бы сначала проверял, не делал много аякса в последнее время