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

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

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

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

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

 "param1=someVal&param2=someOtherVal" 

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

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

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

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

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

// 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 ) 
 parse_str($_POST['whatever'], $searcharray); 

На странице 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 .

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

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

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

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

С уважением

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

  $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'] ); 

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

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

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

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

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

Это ответ на 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 ) 

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

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

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

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

Дайте мне знать, если вам нужно больше разъяснений.

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

форма

 <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; } ?>