Что делать с php после jquery .serialize () - PullRequest
3 голосов
/ 29 мая 2011

Ладно, мне как-то нелегко разобраться с этим, поэтому я хочу сделать вызов ajax с формой, и я использую jquery для сериализации с помощью .serialize (). Данные, отправляемые на php, выглядят примерно так

key1=value&key2=value2&key3=value3

И я использую почтовый запрос. Это выглядит достаточно просто, но почему-то мне очень трудно понять, как получить доступ к этим парам ключ / значение, я не могу использовать explode () для &, потому что это даст мне

[0] => key1=value1
[1] => key2=value2
[2] => key3=value3

и я не могу использовать $ _POST ['key1'] или $ _GET ['key1'] в php для доступа к этим значениям. Что я должен делать!!! Спасибо

И в качестве побочного вопроса я замечаю, что .serilize () заменяет разрывы строк на% 0A и пробелы на +, как мне декодировать эти значения с помощью php? Еще раз спасибо!

Edit:

Привет, код jquery довольно прост:

var formSubmit = $(this).serialize();
$.post('ajax.php',{"formSubmit": "true", "formInfo": formSubmit}

Ответы [ 3 ]

6 голосов
/ 29 мая 2011

Если вы отправляете данные формы с функциональностью 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=
)
0 голосов
/ 29 мая 2011

Ваши значения существуют в formInfo индексе массива $ _POST,

print_r( $_POST['formInfo'] );

echo $_POST['formInfo']['key1'];
0 голосов
/ 29 мая 2011

Попробуйте использовать json в jQuery и json_decode в php.

...