#php #jquery #forms #serialization #form-submit
#php #jquery #формы #сериализация #форма-отправить
Вопрос:
Хорошо, почему-то мне труднее всего разобраться в этом, поэтому я хочу выполнить вызов ajax с формой, и я использую jquery для сериализации его с помощью .serialize() . Данные, отправляемые на php, выглядят примерно так
key1=valueamp;key2=value2amp;key3=value3
И я использую post-запрос. Это выглядит достаточно просто, но почему-то мне очень сложно понять, как получить доступ к этим парам ключ / значение, я не могу использовать explode () для amp;, потому что это даст мне
[0] => key1=value1
[1] => key2=value2
[2] => key3=value3
и я не могу использовать $ _POST [‘key1’] или $ _GET [‘key1’] в php для доступа к этим значениям. Что мне делать!!! Спасибо
И в качестве побочного вопроса, который я замечаю .serilize () заменяет разрывы строк на
, а пробелы на , как мне декодировать эти значения с помощью php? Еще раз спасибо!
Редактировать:
Эй, ну, код jquery довольно прост, его :
var formSubmit = $(this).serialize();
$.post('ajax.php',{"formSubmit": "true", "formInfo": formSubmit}
Комментарии:
1. Как вы отправляете переменные в PHP? Опубликуйте этот код (ваш AJAX-код).
2. Можете ли вы показать инструкцию javascript, отправляющую запрос?
3. Например, я создал это для другой страницы. Посмотрите загруженное содержимое: jfcoder.com/test/serialize.php
4. @Ben — Добавь этот код к своему вопросу.
5. Вам не нужно ничего декодировать на php, просто предоставьте свой код javascript, я уверен, что у вас есть некоторые проблемы с этим
Ответ №1:
Если вы отправляете данные формы с помощью функциональности Ajax jQuery, проблем с использованием возникнуть не должно .serialize()
. Сервер должен видеть содержимое публикации и автоматически декодировать URL-адрес.
В качестве демонстрации смотрите этот код:
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() "nn" data);
});
});
Редактировать
И processor.php содержимое файла:
<?php
print_r($_POST);
?>
ПРАВКА 2
Я думаю, ваша ошибка заключается в том, что вы отправляете содержимое таким образом, чтобы данные формы были текстовой строкой вместо содержимого в кодировке url.
Например, вы могли бы сделать это:
var formSubmit = $(this).serialize() "amp;formSubmit=true";
$.post('ajax.php', formSubmit);
И у вас был бы тот же эффект, и сервер смог бы расширить ваши переменные POST без инцидентов.
ПРАВКА 3
Смотрите этот пример:
Где код:
$(document).ready(function(){
var serial = $('#category-dynamic').serialize() "amp;formSubmit=true";
$('pre').html(serial);
$.post("http://jfcoder.com/test/processor.php", serial, function(data){
$('pre').html($('pre').html() "nn" data);
});
});
Обратите внимание на добавление "amp;formSubmit=true"
к последовательным данным. Это выводится со страницы PHP:
POST Result
category-name=amp;fields%5B%5D=amp;fields%5B%5D=amp;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() "nn" data);
});
});
ВЫВОД
POST Result
category-name=amp;fields%5B]=amp;fields%5B]=
Array
(
[formSubmit] => true
[serial] => category-name=amp;fields%5B]=amp;fields%5B]=
)
Комментарии:
1. @Ben — Смотрите Правку 4 о том, как ваше использование отличается по результату от моего.
2. я думаю, вы правы, способ отправки переменных post был довольно запутанным, и отправка всего этого как одной переменной сделала это намного более плавным. Это сработало!!! Спасибо!! Я тоже только что узнал об этом. Вау, ты определенно так сильно мне помог! Еще раз спасибо, чувак.
3. @Ben — Нет проблем. Вы могли бы прочитать о слиянии и расширении jQuery, так как они могут вам однажды понадобиться.
Ответ №2:
Тогда попробуйте использовать json в jQuery и json_decode в php.
Комментарии:
1. Сериализация должна работать нормально. JSON — это просто еще один способ отправки данных на сервер, он не должен «исправлять» эту проблему.
2. Это исправится, так как в результате у нас будет один объект в JS и в PHP в результате.
3. Это просто другой способ отправки данных.
Ответ №3:
Ваши значения существуют в formInfo
индексе массива $_POST,
print_r( $_POST['formInfo'] );
echo $_POST['formInfo']['key1'];