Використовуючи $('#form').serialize()
, я зміг надіслати це на сторінку PHP. Тепер, як я його несеріалізую в PHP? Він був серіалізований у jQuery.
Використовуючи $('#form').serialize()
, я зміг надіслати це на сторінку PHP. Тепер, як я його несеріалізую в PHP? Він був серіалізований у jQuery.
Відповіді:
Вам не доведеться знімати серіалізацію в PHP з serialize
методу jquery . Якщо ви серіалізуєте дані, вони повинні бути надіслані PHP як параметри запиту, якщо ви використовуєте метод GET ajax-запит або розміщуєте vars, якщо ви використовуєте POST ajax-запит. Отже, в PHP ви отримаєте доступ до значень, таких як $_POST["varname"]
або $_GET["varname"]
залежно від типу запиту.
serialize
Метод просто приймає форму елементів і поміщає їх у вигляді рядка."varname=val&var2=val2"
serialize
повертається. Дивіться справді популярну відповідь нижче.
За умови, що ваш сервер отримує рядок, який виглядає приблизно так (як це має бути, якщо ви використовуєте 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
var arraydata = $('.selector').serialize();
// jquery.post серіалізований 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
)
На сторінці 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) {
$returndata = array();
$strArray = explode("&", $str);
$i = 0;
foreach ($strArray as $item) {
$array = explode("=", $item);
$returndata[$array[0]] = $array[1];
}
return $returndata;
}
З повагою
$i = 0;
Модифікована Муртаза Хуссей відповідь:
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
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()
.
Я думаю, ви переносите значення серіалізованої форми у властивість об'єкта, що, наскільки я знаю, марно.
Сподіваюся, це допомагає!
Це у відповідь на користувача1256561. Дякую за вашу ідею .. однак я не подбав про речі декодування URL-адреси, згадані в step3.
тому ось код 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
)
Вам просто потрібно ім'я атрибута значень у формі. Приклад:
Форма
<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;
}
?>
Використання:
$( '#form' ).serializeArray();
Php отримати масив, не потрібно скасовувати;)
Я думаю, що вам потрібно відокремити назви форм від її значень, один спосіб зробити це - вибухнути (&)
так, що ви отримаєте attribute=value,attribute2=value
.
Думаю, що ви перетворите серіалізовану рядок jQuery в масиви в PHP.
Ось кроки, які вам слід виконати, щоб бути більш конкретними.
jQuery
на PHP
сторінку (наприклад ajax.php
), де ви використовуєте, $.ajax
щоб подати повідомлення за допомогою публікації чи отримання.(&)
таким чином, розділяючи кожен атрибут. Тепер ви отримаєте attribute1 = value, attribute2 = value, тепер ви отримаєте змінну php масиву. напр$data =
array("attribute1=value","attribute2=value")
foreach
на $data
і , так що ви можете відокремити атрибут від значення, і переконайтеся , що
значення , так що вона буде перетворювати серіалізовані значення до значення , яке вам потрібно, і вставити атрибут і його значення нової змінної масиву, який зберігає атрибут та значення серіалізованого рядка.explode
(=)
urldecode
Повідомте мене, якщо вам потрібні додаткові роз'яснення.
Ви можете використовувати цю функцію:
function post_unserialize( $key ){
$post_data = array();
$post_data = $_POST[ $key ];
unset($_POST[ $key ]);
parse_str($post_data, $post_data);
$_POST = array_merge($_POST, $post_data);
}
Як ним користуватися
$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );