Как отправить определенную группу входных данных формы, используя ajax

У меня есть огромная форма для отправки (более 1000 входов в массиве — это проблема для PHP +5,3 см. пределы max_input_vars) в php.

Мне не нужно отправлять все, только группу измененных входов, где ссылка является выбранным входом. Я пытаюсь использовать фильтр 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

Решение

Я думаю, вам не нужны элементы ввода, чтобы все 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]