2011-05-09 68 views
3

我至今有多種形式,但只提交變更中的一個

我創建在Perl,看起來像this使用CGI::ApplicationHTML::Templates一個網站來完成。

底部表單將出現在我的數據庫中的每個數據集。例如。 400次。

底部表單的想法是用戶應該能夠對現有數據集進行更改,頂部表單創建新數據集。

頂部表單工作,並使用Ajax在數據庫中查找非法值,用戶不被允許進入。

問題

將有每個數據集的保存按鈕,如屏幕截圖所示。

如何提交與使用Ajax按下的保存按鈕對應的數據集?

我能做到這一點純jQuery和具有隱藏input像這樣

<form action="" method="post"> 
    <input name="anchor" value="34" type="hidden"> 
    <input name="title" type="text" /> 

    ... 

    <button type="submit">Save</button> 
</form> 

但沒有Ajax,我可以爲數據庫中的非法值不是第一次檢查。

Ajax代碼的外觀如何,只提交保存按鈕所屬窗體的數據集?

回答

3

你可以使用.serialize()方法:

$('form').submit(function() { 
    $.ajax({ 
     url: this.action, 
     type: this.method, 
     data: $(this).serialize(), 
     success: function(result) { 
      // the AJAX request succeeded => do something 
      // with the results returned by the server 
     } 
    }); 
    return false; 
}); 

這將認購一切形式提交事件(也許你可以調整選擇將其限制只包含在表的形式),並提交時它將取消默認操作並通過序列化所有表單字段發送AJAX請求。

+0

這很有趣!但是,如何將數據集發送到後端Perl腳本?這就是我現在的'.ajax()'看起來像http://pastebin.com/aW72iW5L – 2011-05-09 11:37:19

+1

@Sandra Schlichting,'$(this).serialize()'方法將把表單的每個輸入字段與其名稱和值,並生成適當的請求字符串。在您的代碼中,您手動連接了'data'屬性中的所有值,但這不再是必需的,因爲當您序列化表單時,它們將發送到服務器。因此,在您的服務器端腳本中,如果您的服務器端腳本沒有通過AJAX調用發送,而是通過正常的表單提交,則會以與獲取值相同的方式獲取值。 – 2011-05-09 12:14:37

+0

非常感謝您的詳細解釋! =) – 2011-05-09 12:45:31