Ошибка сериализации JQuery - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть форма входа, которую я хочу отправить через ajax с использованием serialize, но данные отправляются в неправильном формате, подобном этому

Array
(
    [form] => uname=as
    [upass] => amitpatilasas
    [action] => login
)

Этот HTML

    <form action="#" method="post" name="login" id="login" rel="external" class="ui-corner-all">

            <div data-role="fieldcontain">
             <input type="text" name="uname" id="uname" value="" placeholder="Username" />
            </div>

            <div data-role="fieldcontain">
             <input type="password" name="upass" id="upass" value="" placeholder="Password" />
            </div>

            <div class="ui-body ui-body-b">
            <fieldset class="ui-grid-a">
                    <div class="ui-block-a"><button type="button" id="cancel" data-theme="d">Cancel</button></div>
                    <div class="ui-block-b"><button type="button" id="dologin" data-theme="a">Login</button></div>
            </fieldset>
            </div>

    </form>

Это javascrip

    $.ajax({
      type: "POST",
      url: "server.php",
      data: "form="+$("#login").serialize()+"&action=login",
      success: function(responce){

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Отбросьте часть "form="+. Тогда это сработает.

$.ajax({
      type: "POST",
      url: "server.php",
      data: $("#login").serialize()+"&action=login",
      success: function(responce){

По крайней мере, это даст вам этот вывод;

Array
(
    [uname] => as
    [upass] => amitpatilasas
    [action] => login
)
0 голосов
/ 19 декабря 2011

Ваш код:

"form="+$("#login").serialize()+"&action=login"

Учитывая someuser и somepassword, отправит эти данные:

form = uname = someuser & upass = somepassword & action = login

Обратите внимание на двойной знак равенства, что неверно, и именно поэтому вы получаете ошибку.Если вы отбросите часть form=, то получите правильную строку запроса.

Однако странно отправлять параметры строки запроса в теле сообщения, а не вURL.Было бы разумнее структурировать ваш код следующим образом:

var loginUrl = "server.php"
    + "?"
    + $("#login").serialize()
    + "&action=login"
    ;

$.ajax({
  type: "POST",
  url: loginUrl,
  success: function(response){
    // ...
  },
  error: function(response){
    // ...
  }
);

... или отправить в теле в виде JSON, а не в качестве параметров строки запроса.

Найтио том, как сериализовать в JSON, см. этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...