компактные все данные формы с javascript

Я хотел бы сжать все данные из огромной HTML-формы с более чем 1000 переменными, чтобы обойти ограничение max_input_vars в версиях PHP до 5.3.9.

Как я могу прочитать все данные в HTML-форме с помощью javascript, сериализовать его (или создать json), чтобы поместить все это только в одно скрытое поле, которое содержит все данные?

На принимающей стороне я бы распаковал ее с помощью PHP (например, с json_decode )

Просто отправил сообщение ajax?

form.html с javascript

<form action="process.php" method="post" id="form"> <input type="text" name="name"> <input type="text" name="username"> <button type="submit" id="sendForm">Send</button> </form> <!-- YOUR JAVASCRIPT --> <script type="text/javacript"> $('#sendForm').click(function() { $.ajax({ type: 'POST', url: $('#form').attr('action'), data: $('#form').serialize(), success: function(data) { // WHATEVER YOU WANT HERE } }); return false; }); </script> 

process.php

 <?php $name = $_POST['name']; // other form fields here } 

Я создал скрипт, который автоматически выполняет задание на всех почтовых формах:

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script> // this disables all form elements and creates only one new element that contains all data serialized $('form[method="post"]').submit(function() { var num_form_elements=$(this).find('input, select, textarea').not('[type="submit"]').length; var num_elements_already_disabled=$(this).find('input:disabled, select:disabled, textarea:disabled').length; enabled=(num_form_elements-num_elements_already_disabled); if($('textarea[name="serialized_data"]', this).length > 0) { alert("Backbutton is not supported yet!"); return false; } if($('textarea[name="serialized_data"]', this).length > 0 || enabled<=0) { alert("Reload of the form is not supported yet!"); return false; } var data=$(this).serialize(); $(this).find('input, select, textarea').not('[type="submit"]').attr("disabled", true); $(this).append(' <input type="hidden" name="num_form_elements" value="'+num_form_elements+'">'); $(this).append(' <input type="hidden" name="num_elements_already_disabled" value="'+num_elements_already_disabled+'">'); $(this).append(' <textarea style="display:true" name="serialized_data">'+(data)+'</textarea>'); // maybe in the textarea I have to .replace(/</g,'&lt;') ? }); </script> 

На стороне приема вы не можете использовать parse_str() PHP, потому что директива max_input_vars также влияет на эту функцию, поэтому вам нужно что-то еще: я взял my_parse_str() из https://gist.github.com/rubo77/6821632

 <?php $params=my_parse_str($_REQUEST['serialized_data']); echo count($params,1)." serialized variables:<br>"; var_export($params); ?> 

Пример скрипта на https://gist.github.com/rubo77/6815945

Сериализуйте его с помощью JQuery . Затем вы можете проанализировать строку URL с помощью PHP.

возможно, serialize и JSON.stringify могут работать вместе, хотя я не пробовал.