Что делать с php после jquery .serialize()

#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'];