Как сделать PHP-неэтериализацию jQuery-сериализованной формы?

Используя $('#form').serialize(), я смог отправить это на страницу PHP. Теперь, как я неэриализую его в PHP? Он был сериализован в jQuery.

Ответ 1

Вам не нужно отказываться от каких-либо изменений в PHP из метода jquery serialize. Если вы сериализуете данные, он должен быть отправлен на PHP в качестве параметров запроса, если вы используете запрос ajax метода GET или post vars, если вы используете запрос POST ajax. Таким образом, в PHP вы получите доступ к значениям типа $_POST["varname"] или $_GET["varname"] в зависимости от типа запроса.

Метод serialize просто принимает элементы формы и помещает их в строчную форму. "varname=val&var2=val2"

Ответ 2

Если ваш сервер получает строку, которая выглядит примерно так (что нужно, если вы используете jQuery serialize()):

"param1=someVal&param2=someOtherVal"

... что-то вроде этого, вероятно, все, что вам нужно:

$params = array();
parse_str($_GET, $params);

$params должен быть массивом, моделируемым как вы ожидаете. Обратите внимание, что это также работает с массивами HTML.

Для получения дополнительной информации см. следующее: http://www.php.net/manual/en/function.parse-str.php

Надеюсь, что это полезно. Удачи!

Ответ 3

//jQuery Post

var arraydata = $('.selector').serialize();

//jquery.post serialized var - TO - PHP Формат массива

parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array

//Вы получаете то же самое из

 Array (
 [A] => 1
 [B] => 2
 [C] => 3
 [D] => 4
 [E] => 5
 [F] => 6
 [G] => 7
 [H] => 8
 )

Ответ 4

parse_str($_POST['whatever'], $searcharray);

Ответ 5

В HTML странице:

<script>
function insert_tag()
{
    $.ajax({
        url: "aaa.php",
        type: "POST",
        data: {
            ssd: "yes",
            data: $("#form_insert").serialize()
        },
        dataType: "JSON",
        success: function (jsonStr) {
            $("#result1").html(jsonStr['back_message']);
        }
    });
}
</script>

<form id="form_insert">
    <input type="text" name="f1" value="a"/>
    <input type="text" name="f2" value="b"/>
    <input type="text" name="f3" value="c"/>
    <input type="text" name="f4" value="d"/>
    <div onclick="insert_tag();"><b>OK</b></div>
    <div id="result1">...</div>
</form>

на странице PHP:

<?php
if(isset($_POST['data']))
{
    parse_str($_POST['data'], $searcharray);
    $data = array(
        "back_message"   => $searcharray['f1']
    );
    echo json_encode($data);
}
?>

в этом php-коде, верните поле f1.

Ответ 6

Почему бы не использовать ассоциативный массив, поэтому вы можете легко его использовать.

function unserializeForm($str) {
    $returndata = array();
    $strArray = explode("&", $str);
    $i = 0;
    foreach ($strArray as $item) {
        $array = explode("=", $item);
        $returndata[$array[0]] = $array[1];
    }

    return $returndata;
}

Привет

Ответ 7

Модифицированный Муртаза Хусейн:

function unserializeForm($str) {
    $strArray = explode("&", $str);
    foreach($strArray as $item) {
        $array = explode("=", $item);
        $returndata[] = $array;
    }
    return $returndata;
}

Ответ 8

Просто сделайте это

        $get = explode('&', $_POST['seri'] ); // explode with and

        foreach ( $get as $key => $value) {
          $need[ substr( $value, 0 , strpos( $value, '=' ) ) ] =  substr( $value, strpos( $value, '=' ) + 1 ) ;
        }
// access your query param name=ddd&email=aaaaa&username=wwwww&password=wwww&password=eeee
     var_dump( $need['name'] );

Ответ 9

Я не знаю, какую версию Jquery вы используете, но это работает для меня в jquery 1.3:

$.ajax({
    type: 'POST', 
    url: your url,
    data: $('#'+form_id).serialize(), 
    success: function(data) {
        $('#debug').html(data);
  }
});

Затем вы можете получить доступ к строкам массива POST, как обычно, в php. Просто попробуйте с помощью print_r().

Я думаю, что вы обертываете сериализованное значение формы в свойстве объекта, что бесполезно, насколько я знаю.

Надеюсь, это поможет!

Ответ 10

Это ответ на user1256561. Спасибо за вашу идею.. однако я не позаботился о расшифровке url, упомянутом в шаге 3.

так вот PHP-код, который будет декодировать сериализованные данные формы, если кому-то это понадобится. Кстати, используйте этот код по своему усмотрению.

function xyz($strfromAjaxPOST)
{
    $array = "";
    $returndata = "";
    $strArray = explode("&", $strfromPOST);
    $i = 0;
    foreach ($strArray as $str)
    {
        $array = explode("=", $str);
        $returndata[$i] = $array[0];
        $i = $i + 1;
        $returndata[$i] = $array[1];
        $i = $i + 1;
    }
    print_r($returndata);
}

Ввод данных ввода url будет выглядеть следующим образом: attribute1 = value1 & attribute2 = value2 & attribute3 = value3 и т.д.

Вывод кода выше будет по-прежнему находиться в массиве, и вы можете изменить его, чтобы присвоить ему любую переменную, и это зависит от того, как вы хотите использовать эти данные дальше.

Array
(
    [0] => attribute1
    [1] => value1
    [2] => attribute2
    [3] => value2
    [4] => attribute3
    [5] => value3
)

Ответ 11

Вам просто нужно присвоить имя атрибута значения в форме. Пример:

Форма

<form id="login_form">
    <input type="text" name="username" id="a"/>
    <input type="password" name="password" id="b"/>
    <button type="button" onclick="login()">Submit</button>
</form>

Javascript

$(document).ready(function(){});
function login(){
  var obj = $('#login_form').serialize();
  $.post('index.php', obj, function(res){
    alert(res);
  })
}

PHP - index.php

<?php
if(!empty($POST['username']) && !empty($POST['password'])){
  $user = $POST['username'];
  $pass = $POST['password'];
  $res = "Username : ".$user." || Password : ".$pass;
  return $res;
}
?>

Ответ 12

Я думаю, вам нужно отделить имена форм от своих значений, один из способов сделать это - взорвать (&), чтобы вы получили attribute=value,attribute2=value.

Моя точка зрения заключается в том, что вы преобразуете сериализованную строку jQuery в массивы в PHP.

Ниже приведены шаги, которые вы должны соблюдать, чтобы быть более конкретными.

  • Передано на сериализованной странице jQuery на PHP (например, ajax.php) где вы используете $.ajax для отправки с помощью сообщения или получения.
  • На вашей php-странице взорвите (&), разделив таким образом каждый атрибутов. Теперь вы получите атрибут1 = значение, attribute2 = значение, теперь вы получите переменную массива php. например $data = array("attribute1=value","attribute2=value")
  • Сделайте foreach на $data и explode (=), чтобы вы могли отделите атрибут от значения и убедитесь, что urldecode значение, чтобы оно преобразуло сериализованные значения в значение что вам нужно, и вставьте атрибут и его значение в новый массив переменная, которая сохраняет атрибут и значение сериализованного строка.

Сообщите мне, если вам нужны дополнительные разъяснения.

Ответ 13

Использование:

$( '#form' ).serializeArray();

PHP получить массив, не нужно десериализовать;)