2015-04-28 5 views
0

У меня есть огромная форма для отправки (более 1000 входов в массиве - это проблема для php +5.3 см. max_input_vars limits) в php.Как отправить определенную группу входных данных формы с помощью ajax

Мне не нужно отправлять все, только группа модифицированных входов, где эталон является выбранным входом. Я пытаюсь использовать фильтр jQuery и serializeArray() для его решения, но он не работает. Я должен использовать ajax для этого.

Моя форма в цикле PHP с данными из БД

<form method="post" action="" id="resultado_trabalhos" name="resultado_trabalhos"> 

    <?php do { ?> 
<select name="status_trabalho[]" id="status_trabalho<?php echo $row_listaTrabalhos['id_usuario']; ?>"> 
<option value="3" <?php if (!(strcmp(3, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>em avaliação</option> 
<option value="4" <?php if (!(strcmp(4, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>oral</option> 
<option value="5" <?php if (!(strcmp(5, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>poster</option> 
<option value="6" <?php if (!(strcmp(6, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>não selecionado</option> 
</select> 

<textarea name="motivoDevolucao[]" id="motivoDevolucao<?php echo $row_listaTrabalhos['id_trabalho']; ?>" cols="100" rows="2" wrap="physical" style="display:none;">&nbsp;</textarea> 

    <input type="hidden" id="id_autor<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="id_autor[]" value="<?php echo $row_listaTrabalhos['id_usuario']; ?>" /> 
    <input type="hidden" id="token_trabalho<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="token_trabalho[]" value="<?php echo $row_listaTrabalhos['token_submissao']; ?>" /> 
    <input type="hidden" id="marcadorStatus<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="marcadorStatus[]" value="<?php echo $row_listaTrabalhos['status_trabalho']; ?>" /> 
    <input type="hidden" id="nome<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="nome[]" value="<?php echo $row_listaTrabalhos['nome_usuario'] . " " . $row_listaTrabalhos['sobrenome_usuario']; ?>" /> 
    <input type="hidden" id="email_usuario<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="email_usuario[]" value="<?php echo $row_listaTrabalhos['email_usuario']; ?>" /> 

    <?php } while ($row_listaTrabalhos = mysqli_fetch_assoc($listaTrabalhos)); ?> 
    </form> 

marcadorStatus[] это мой якорь для сравнения с выбора входа status_trabalho[].

Я хотел бы serializeArray() с чем-то вроде marcadorStatus[] != status_trabalho[]. Итак, если это true, отправьте только группу входов с тем же индексом массива (id_autor[], nome[], email_usuario[] и т. Д.).

+0

Благодарим за помощь, @cchacholiades! –

ответ

0

Я думаю, что вам не нужны элементы ввода для всех значений id. Если нет, лучше оставить их; Это меньше работает для браузера.

Вместо этого дайте им класс, который их группирует.

Теперь я не программировать PHP, так что вам, возможно, придется рассматривать это как псевдо-код:

<form method="post" action="" id="resultado_trabalhos" name="resultado_trabalhos"> 
<? $i = 0; ?> 
<?php do { ?> 
    <select class="group-<?php echo $i; ?>" name="status_trabalho[]" data-group-index="<?php echo $i; ?>"> 
     <option value="3" <?php if (!(strcmp(3, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>em avaliação</option> 
     <option value="4" <?php if (!(strcmp(4, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>oral</option> 
     <option value="5" <?php if (!(strcmp(5, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>poster</option> 
     <option value="6" <?php if (!(strcmp(6, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>não selecionado</option> 
    </select> 

    <textarea class="group-<?php echo $i; ?>" name="motivoDevolucao[]" cols="100" rows="2" wrap="physical" style="display:none;">&nbsp;</textarea> 

    <input type="hidden" class="group-<?php echo $i; ?>" name="id_autor[]" value="<?php echo $row_listaTrabalhos['id_usuario']; ?>" /> 
    <input type="hidden" class="group-<?php echo $i; ?>" name="token_trabalho[]" value="<?php echo $row_listaTrabalhos['token_submissao']; ?>" /> 
    <input type="hidden" class="group-<?php echo $i; ?>" name="marcadorStatus[]" value="<?php echo $row_listaTrabalhos['status_trabalho']; ?>" /> 
    <input type="hidden" class="group-<?php echo $i; ?>" name="nome[]" value="<?php echo $row_listaTrabalhos['nome_usuario'] . " " . $row_listaTrabalhos['sobrenome_usuario']; ?>" /> 
    <input type="hidden" class="group-<?php echo $i; ?>" name="email_usuario[]" value="<?php echo $row_listaTrabalhos['email_usuario']; ?>" /> 

    <? ++$i; ?> 
<?php } while ($row_listaTrabalhos = mysqli_fetch_assoc($listaTrabalhos)); ?> 
</form> 

Как для вызова Ajax, я думаю, что вы хотите использовать .serialize(), вместо .serializeArray().

$('#resultado_trabalhos').submit(function(e) { 
    e.preventDefault(); 

    var $form = $(this); 

    // This will hold the input elements to be submitted. 
    var inputs = []; 

    // Add any inputs that should always be submitted. 
    inputs.push.apply(inputs, $form.find('.always-submit').get()); 

    // Loop through all the "status_trabalho[]" selects. 
    $form.find('select[name="status_trabalho[]"]').each(function() { 
     var $select = $(this); 
     // Check if the select value was changed. 
     if ($select.val() != $select.nextAll('input[name="marcadorStatus[]"]:first').val()) { 
      // Push all the inputs from the group onto the "inputs" array. 
      inputs.push.apply(inputs, $form.find('.group-' + $select.attr('data-group-index')).get()); 
     } 
    }); 

    $.ajax({ 
     type: 'post', 
     url: 'someUrl', 
     data: $(inputs).serialize(), 
     // ... 
    }); 
}); 
+0

Спасибо. Я попробую. –

+0

Я не знаю почему, но я получаю ошибку в этой строке 'inputs.push.apply (input, $ form.find ('. Group-' + $ (select.attr ('data-group-index')). get()); ' –

+0

@RenatoPirei - В этой строке была добавлена ​​открывающая скобка. Он должен быть' $ select.attr', а не '$ (select.attr'. Я обновил код в своем ответе –

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