2010-02-04 54 views
1

我有一個表單可以有不同數量的文本字段(包含轉換值)。他們的名字是例如:「textfield_eng」,「textfield_ger」,「textfield_dut」。在ajax請求中填充數據字符串

在我的ajax請求中,我希望當然提交這些字段,但我不知道如何填充這些字段名稱及其值到數據字符串中。

這是數據呼叫的樣子:

$.ajax({ 
    type: "POST", 
    url: $("#optionForm").attr("action"), 
    dataType: "xml", 
    cache: false, 
    data: { formname: $("#optionForm input[name='formname']").val(), 
    submit: $("#optionForm input[name='submit']").val() 
    }, 
    success: function(xml){ 
           bladibla.... 

這是我怎麼想它是:

$.ajax({ 
    type: "POST", 
    url: $("#optionForm").attr("action"), 
    dataType: "xml", 
    cache: false, 
    data: { formname: $("#optionForm input[name='formname']").val(), 
    submit: $("#optionForm input[name='submit']").val(), 
textfield_eng : "english", 
textfield_ger : "german", 
textfield_dut : "dutch" 
    }, 
    success: function(xml){ 
           bladiblla... 

什麼是做到這一點的最好方法是什麼?

<input id="sOption_dut" name="sOption_dut" class="form_textfield" type="text" value="" /> 
<input id="sOption_eng" name="sOption_eng" class="form_textfield" type="text" value="" /> 
<input id="sOption_ger" name="sOption_ger" class="form_textfield" type="text" value="" /> 
+0

哦,抱歉。會立即行動。 – 2010-02-04 12:19:34

+0

好的,現在好多了。保持努力提供良好和有用答案的獎勵用戶。 – Natrium 2010-02-04 12:28:41

+1

是的,先生!希望我也可以幫助其他一些主題的其他人。但jquery對我來說很新。 – 2010-02-04 12:32:10

回答

2

你檢查了jQuery Form plugin嗎?通過ajax提交表單更容易。

+0

只需很快。但現在深入一點,看到你可以以數組的形式將數據提交給ajax請求[{'name':'value'},{'name':'value'}]],這當然可以提供幫助。 它以某種方式遍歷表單並創建該數組,因此答案必須在某處。 – 2010-02-04 13:16:59

+0

它還處理瀏覽器之間發生的一些異常情況。讓生活變得更加快樂。 – PetersenDidIt 2010-02-04 16:36:51

0

更新 創建與jquery新文本框將是

$('<input />').attr({ 
        id: 'sOption_dut', 
        name: 'sOption_dut', 
        class: 'form_textfield' , 
        type: 'text', 
        value: '' 
        }).appendTo('form_or_otherwise_selector_here'); 

上面顯示瞭如何使用指定的屬性創建一個輸入字段,然後將其附加到某個其它元件(該方式通常是一種形式)。

請記住,上面的代碼應該在頁面加載時執行,或者當您決定將窗體顯示給最終用戶時執行。它不應該放置在ajax調用代碼中,因爲這意味着它將在提交時獲取生成,不給最終用戶填寫資料...的機會(除非這是預期的效果。)

變化 form_or_otherwise_selector_here到 告訴它在哪裏放置輸入框


你有一個錯字在你的代碼

data: { formname: $("#optionForm input[name='formname']").val(), 
       submit: $("#optionForm input[name='submit']").val() 
textfield_eng : "english", 
textfield_ger : "german", 
textfield_dut : "dutch", 
       } 

您需要刪除最後一個逗號(荷蘭文後),並提交值後添加一個..
所以它應該是

data: { formname: $("#optionForm input[name='formname']").val(), 
       submit: $("#optionForm input[name='submit']").val(), 
textfield_eng : "english", 
textfield_ger : "german", 
textfield_dut : "dutch" 
       } 

+0

@Natrium,oups對不起..沒有看到..所以你想讓用戶看到這些文本框,以便他可以填寫數據? – 2010-02-04 13:04:04

+0

是的。該表單看起來像這樣。 2010-02-04 13:19:13

+0

答案已更新.. – 2010-02-04 13:44:33

2

好理解了它全部由我自己。檢查了jquery文檔,發現你也可以將數據字符串作爲數組提交(如上面的註釋所述)。這讓我以正確的方式思考。

這是如何做到這一點:

var aData = []; 
    $("input", $("#myForm")).each(function(){ 
     aData.push({name: $(this).attr("name"), value: $(this).val()}); 
    }); 

    $.ajax({ 
     type: "POST", 
     url: $("#myForm").attr("action"), 
     dataType: "xml", 
     cache: false, 
     data: aData, 
     success: function(xml){ 
          blablabla... 

所以,遍歷窗體輸入字段(我只有文本框,但如果你有收音機或選擇,您需要更改此一點,看別處本網站提供關於如何遍歷字段的提示),然後構建數組。你唯一需要做的就是在ajax請求中推送它。

它畢竟那麼簡單...

+0

用於檢查文檔的 – Natrium 2010-02-04 15:13:20

+0

好的......我完全錯過了什麼問題..對此感到遺憾..看看jQuery的'serializeArray()',因爲它是你想要的..使用它像'數據:$('#myForm')。serializeArray()' – 2010-02-04 15:40:00

+0

再次。我再次嘗試,現在我記得爲什麼這不適合我。 serializeArray()不會序列化隱藏字段並提交字段。這符合上述的原則。 – 2010-02-05 18:02:57