2012-10-31 45 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,甚至是默認的形式提交如果你還沒有在你的表單字段定義的任何名稱將無法正常工作。