Если вы отправляете данные формы с функциональностью jjuery Ajax, проблем с использованием .serialize()
не должно быть. Сервер должен видеть и urldecode автоматически содержимое POST.
В качестве демонстрации см. Этот код:
HTML
<code><form id="category-dynamic" class="dynamic">
<fieldset id="inner-fieldset">
<legend id="new-category">
<label for="category-name">Category Name: </label>
<input type="text" name="category-name" value="" />
</legend>
<ul id="category-fields">
<li>
<label>Field #1:</label><br />
<input type="text" name="fields[]" value="" />
</li>
<li>
<label>Field #2:</label><br />
<input type="text" name="fields[]" value="" />
</li>
</ul>
</fieldset>
</form>
<h3>POST Result</h3>
<pre>
JQuery
$(document).ready(function(){
$('pre').html($('#category-dynamic').serialize());
$.post("http://jfcoder.com/test/processor.php", $('#category-dynamic').serialize(), function(data){
$('pre').html($('pre').html()+"\n\n"+data);
});
});
EDIT
И содержимое файла processor.php:
<?php
print_r($_POST);
?>
РЕДАКТИРОВАТЬ 2
Я думаю, что ваша ошибка в том, что вы отправляете содержимое таким образом, чтобы данные формы были текстовой строкой, а не содержимым в кодировке URL.
Например, вы можете сделать это:
var formSubmit = $(this).serialize() + "&formSubmit=true";
$.post('ajax.php', formSubmit);
И вы получите тот же эффект, и сервер сможет расширить ваши переменные POST без инцидентов.
РЕДАКТИРОВАТЬ 3
См. Этот пример:
Где код:
$(document).ready(function(){
var serial = $('#category-dynamic').serialize() + "&formSubmit=true";
$('pre').html(serial);
$.post("http://jfcoder.com/test/processor.php", serial, function(data){
$('pre').html($('pre').html()+"\n\n"+data);
});
});
Обратите внимание на добавление "&formSubmit=true"
к последовательным данным. Это выводит со страницы PHP:
POST Result
category-name=&fields%5B%5D=&fields%5B%5D=&formSubmit=true
Array
(
[category-name] =>
[fields] => Array
(
[0] =>
[1] =>
)
[formSubmit] => true
)
РЕДАКТИРОВАТЬ 4
Используется метод, который вы описываете. Видишь разницу?
$(document).ready(function(){
var serial = $('#category-dynamic').serialize();
$('pre').html(serial);
$.post("http://jfcoder.com/test/processor.php", {"formSubmit":"true","serial":serial}, function(data){
$('pre').html($('pre').html()+"\n\n"+data);
});
});
OUTPUT
POST Result
category-name=&fields%5B%5D=&fields%5B%5D=
Array
(
[formSubmit] => true
[serial] => category-name=&fields%5B%5D=&fields%5B%5D=
)