2011-12-19 46 views
0

我已经登入,我想通过使用序列AJAX,但像这样jQuery的序列化错误

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

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

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

至少它会给你这个输出;

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

嘿Emre,谢谢你......它的工作......我不能相信我怎么能成为这么多的DUMB ...... yi没有正确地分析它:P –

+0

抱歉不要误会我的意思......我读过你的答案首先接受它,评论,然后我看到下一篇文章......我评论说,也接受...我不知道它会删除第一个“接受”我是新的stackoverflow。 –

+1

没问题。如果其他答案更令你满意,你可以接受而不是我的。这是你的选择。我只是好奇你的理由。 –

0

您的代码:

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

鉴于someusersomepassword,就会发出这样的数据:

形式= UNAME = SomeUser的& upass = somepassword &动作=登录

注意双等号,这是错误的,这就是为什么你会得到错误。如果你放弃了form=部分,那么你会得到一个正确的查询字符串。

然而,奇怪的是在查询字符串参数发送的体的消息而不是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

+0

嘿谢谢Merlyne ...这工作... –

+1

Merlyn,如果你发送JSON,jQuery会自动序列化它,并将其转换为查询字符串形成。这种情况的最佳做法是使用'data'属性。阿米特做得对。 –

+0

@EmreErkan:“如果你发送JSON,jQuery会自动序列化并将其转换为查询字符串形成” - 它不会将它放在URL tho中(至少[不是通过我的实验](http://jsfiddle.net/) cqadk /))。如果它自动撕裂JSON(甚至手动格式化)并将其转换为消息*正文中的查询字符串*,那很奇怪。我正在谈论AJAX最佳实践,而不是jQuery。让你的AJAX API期望消息正文中的查询字符串很奇怪。 –