Хорошо, как-то, когда мне было сложнее понять это, поэтому я хочу сделать ajax вызова с формой и им, используя jquery, чтобы сериализовать его с помощью .serialize (). Данные, отправляемые на php, выглядят примерно так:
key1=value&key2=value2&key3=value3
И im используя почтовый запрос. Это выглядит довольно просто, но почему-то им очень сложно выяснить, как получить доступ к этим парам ключ / значение, я не могу использовать explode (), и потому это даст мне
[0] => key1=value1 [1] => key2=value2 [2] => key3=value3
и я не могу использовать $ _POST ['key1'] или $ _GET ['key1'] в php для доступа к этим значениям. Что мне делать!!! благодаря
И как побочный вопрос, который я замечаю .serilize () заменяет разрывы строк на% 0A и пробелы с +, как я могу декодировать эти значения с помощью php? Еще раз спасибо!
Редактировать:
Привет, код jquery довольно прост:
var formSubmit = $(this).serialize(); $.post('ajax.php',{"formSubmit": "true", "formInfo": formSubmit}
Если вы отправляете данные формы с помощью функции jQuery Ajax, не должно быть проблем с использованием .serialize()
. Сервер должен видеть и urldecode автоматически содержимое POST.
В качестве демонстрации см. Этот код:
HTML
<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></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); }); });
РЕДАКТИРОВАТЬ
И содержимое файла processor.php:
<?php print_r($_POST); ?>
EDIT 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 )
EDIT 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); }); });
ВЫВОД
POST Result category-name=&fields%5B%5D=&fields%5B%5D= Array ( [formSubmit] => true [serial] => category-name=&fields%5B%5D=&fields%5B%5D= )
Попробуйте использовать json в jQuery и json_decode в php.
Значения существуют в индексе formInfo
массива $ _POST,
print_r( $_POST['formInfo'] ); echo $_POST['formInfo']['key1'];