jquery序列化错误

时间:2011-12-19 08:14:30

标签: jquery jquery-mobile

我有登录表单,我希望通过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 个答案:

答案 0 :(得分:2)

删除"form="+部分。然后它会工作。

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

至少它会给你这个输出;

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

答案 1 :(得分:0)

您的代码:

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

鉴于someusersomepassword,会发送此数据:

  

形式= UNAME = SomeUser是否&安培; upass = somepassword&安培;动作=登录

注意双等号,这是错误的,这就是你得到错误的原因。如果删除form=部分,那么您将获得正确的查询字符串。

然而,在消息的 body 中发送查询字符串参数而不是URL是很奇怪的。以这种方式构建代码更有意义:

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

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

...或者以JSON而不是查询字符串参数的身份发送。

To find out how to serialize to JSON, see this question