Используя $('#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¶m2=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.
Вот шаги, которые вы должны соблюдать, чтобы быть более конкретными.
jQuery
на страницу PHP
(например, ajax.php
), где вы используете $.ajax
для отправки с помощью сообщения или получения. (&)
разделив таким образом каждый атрибут. Теперь вы получите атрибут1 = значение, attribute2 = значение, теперь вы получите переменную массива php. например $data = array("attribute1=value","attribute2=value")
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; } ?>