2012-10-31 74 views
1

我有一个非常简单的形式与一些复选框,单选按钮和selectboxes。我想使用jQuery的$ .ajax发布所有选定的表单数据。但由于某种原因,表单并未被序列化。我不确定是什么原因造成的...(旁注:$('#FormID').submit(..)不适用于我)。所以,我创建了一个按钮,用下面的代码:jQuery的.serialize()不会做任何事情

$(document).ready(function() { 
    $('#DoSearchRequest').click(function(event) { 
     //event.preventDefault(); // read about this somewhere, doesn't help 
     $('#res').html($('#FormSearch').serialize()); // just some <p> to output the result to 
     $.ajax({ 
      url:  'http://www.domain.nl/ajax/GetResultsBySearchRequest.php', 
      data:  $('#FormSearch').serialize(), 
      type:  'POST', 
      success: function(result) { 
          console.log(result); 
         }, 
      error: function(a, b, c) { console.log(a); } 

     }); 

     return false; 
    }); 
}); 

我的按钮的形式之外(如果它在形式,也没关系)。

我的形式:

<form name="FormSearch" id="FormSearch" method="post"> 
... form elements 
</form> 

我使用jQuery 1.7.1和jQueryUI的1.8.18

+1

你是说Ajax的请求,但在服务器端没有收到任何数据?你的表单元素是否有'name'属性?如果你至少显示了一些元素的html,这将有所帮助。 – nnnnnn

+0

是的,成功的功能已经达成。但PHP脚本中的$ _POST是空的。表单元素具有名称属性(全部)。我认为问题不在那里,因为'$('#res')。html()'也是空的。 – Ben

+1

你没有任何其他形式(或其他元素)具有相同的ID“”FormSearch“”你呢? (如果你这样做可能是第一个序列化的)。你确实有“成功”的表单域,即启用的域,检查过的复选框等。 – nnnnnn

回答

2

细算您预览网页我想说这个问题可能是你在另一个表单元素“searchbar”中嵌套了表单元素“form543”。

在Firefox中测试,我发现$("#form543").length0,所以jQuery显然根本找不到表单。当我尝试$("#searchbar").serialize()时,它返回了select元素的实际字段值以及我检查过的复选框等等。

我建议取出外表单元素“搜索栏”(或以其他方式更改的标记,所以你不必嵌套形式),看看你的JS代码的工作即可。

+0

非常感谢!我完全忽略了那部分。虽然我正在优化我复制粘贴旧的容器结构,没有提到一个表单标签已经定义。有点马虎,但谢谢告诉我! +1并被接受。也许是一个迟到的反应,但在荷兰,这是昨天的就寝时间;) – Ben

0

你必须做出这样的事情:

$('form').submit(function() { 
    alert($(this).serialize()); 
    return false; 
}); 
6

傻,但对我来说,这是我没有名字在我的表格中的字段,所以.serialize给了我一个空字符串,.serializeArray也没有工作。

表单字段或你不会得到任何价值。

<input name='importantField'/> 

是不一样的

<input id='importantField'/> 

.serialize.serializeArray,甚至是默认的形式提交如果你还没有在你的表单字段定义的任何名称将无法正常工作。