2010-02-04 2 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

oh oops извините. сделают прямо сейчас. –

+0

хорошо, теперь намного лучше. Будьте благодарны пользователям, которые прилагают усилия для предоставления хорошего и полезного ответа. – Natrium

+1

да сэр! Надеюсь, я смогу помочь и другим людям по другим предметам. но jquery для меня совершенно новый. –

ответ

2

Вы проверили jQuery Form plugin? Делает формы с помощью ajax намного проще.

+0

просто быстро. но вдался в нее немного глубже и увидел, что вы можете отправить данные в запрос ajax в качестве массива также [{'name': 'value'}, {'name': 'value'}], и это, безусловно, может помочь , он каким-то образом проходит через форму и создает этот массив, поэтому ответ должен быть где-то там. –

+0

Он также обрабатывает некоторые аномалии, которые происходят между браузерами для вас. Делает жизнь так счастливее. – PetersenDidIt

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 извините .. не видел этого .. Итак, вы хотите, чтобы пользователь был представлен с этими текстовыми полями, чтобы он мог заполнить данные? –

+0

Да. форма будет выглядеть примерно так.

+0

ответ обновлен .. –

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

+1 для проверки документации – Natrium

+0

ok ... я полностью упустил проблему. Извините. .. Посмотрите на 'serializeArray()' jQuery, поскольку это то, что вы хотите .. используйте его как 'data : $ ('# myForm'). serializeArray() ' –

+0

Привет. Я попробовал это снова, и теперь я помню, почему это не сработало для меня. serializeArray() не сериализует скрытые поля и отправляет поля. который работает с указанными выше строками. –

Смежные вопросы