2009-11-24 22 views
127

Sử dụng $('#form').serialize(), tôi đã có thể gửi trang này qua trang PHP. Bây giờ làm thế nào để tôi unserialize nó trong PHP? Nó đã được tuần tự hóa trong jQuery.Làm thế nào để tôi-unserialize một hình thức jQuery-serialized?

+2

Đối với những câu hỏi như thế này, tôi khuyên bạn nên sử dụng Firebug để xem dữ liệu nào được định dạng tới máy chủ. Sau đó, bạn có thể dễ dàng đăng ví dụ về dữ liệu của mình. – chiborg

Trả lời

57

Bạn không cần phải unserialize bất kỳ thứ gì trong PHP từ phương thức jquery serialize. Nếu bạn tuần tự hóa dữ liệu, nó sẽ được gửi đến PHP dưới dạng tham số truy vấn nếu bạn đang sử dụng một phương thức GET ajax request hoặc post vars nếu bạn đang sử dụng một yêu cầu ajax POST. Vì vậy, trong PHP, bạn sẽ truy cập các giá trị như $_POST["varname"] hoặc $_GET["varname"] tùy thuộc vào loại yêu cầu.

Phương thức serialize chỉ lấy các phần tử biểu mẫu và đặt chúng dưới dạng chuỗi. "varname=val&var2=val2"

+0

Cảm ơn bạn Chris !! –

+4

"đã" * nháy mắt *;) – JohnnyQ

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

Với điều kiện là máy chủ của bạn đang nhận được một chuỗi trông giống như thế này (mà nó nên nếu bạn đang sử dụng jQuery serialize()):

"param1=someVal&param2=someOtherVal" 

... một cái gì đó như thế này có lẽ là tất cả bạn cần:

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

$params sau đó sẽ là một mảng được mô hình hóa theo cách bạn mong đợi. Lưu ý điều này cũng làm việc với các mảng HTML.

Xem sau để biết thêm thông tin: http://www.php.net/manual/en/function.parse-str.php

Hy vọng rằng sẽ rất hữu ích. Chúc may mắn!

+5

Đó là cách tốt nhất để thực hiện. \t \t parse_str ($ _ REQUEST ['jquery_serialized_values'], $ đầu ra); \t print_r ($ output); – Andy

+66

Câu trả lời này phải được chấp nhận, câu trả lời thực tế không có câu trả lời. – Ismael

+2

Phương pháp này tốt hơn phương pháp kia. – dartacus

1

Tôi không biết phiên bản nào của Jquery bạn đang sử dụng, nhưng hoạt động này đối với tôi trong jquery 1.3:

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

Sau đó, bạn có thể truy cập các phím mảng POST như bạn vẫn thường làm trong php. Chỉ cần thử với một số print_r().

Tôi nghĩ rằng bạn đang gói giá trị biểu mẫu được tuần tự hóa trong thuộc tính của đối tượng, điều đó là vô dụng theo như tôi biết.

Hy vọng điều này sẽ hữu ích!

0

Tôi nghĩ bạn cần tách tên biểu mẫu khỏi giá trị của nó, một phương pháp để thực hiện việc này là phát nổ (&) để bạn sẽ nhận được attribute=value,attribute2=value.

Điểm của tôi ở đây là bạn sẽ chuyển đổi chuỗi jQuery được tuần tự hóa thành các mảng trong PHP.

Đây là các bước bạn nên làm theo để cụ thể hơn.

  1. Qua trên serialized jQuery đến một trang PHP (ví dụ ajax.php) nơi bạn sử dụng $.ajax để gửi bằng đường bưu điện hoặc nhận được.
  2. Từ trang php của bạn, hãy phát nổ số (&) do đó tách từng thuộc tính . Bây giờ bạn sẽ nhận được attribute1 = value, attribute2 = value, bây giờ bạn sẽ nhận được một biến mảng php. e.g $data = array("attribute1=value","attribute2=value")
  3. Thực hiện foreach trên $dataexplode các (=) để bạn có thể tách các thuộc tính từ giá trị, và hãy chắc chắn urldecode giá trị để nó sẽ chuyển đổi các giá trị tuần tự với giá trị mà bạn cần, và chèn thuộc tính và giá trị của nó vào một mảng mới biến, lưu trữ thuộc tính và giá trị của chuỗi được tuần tự hóa.

Hãy cho tôi biết nếu bạn cần giải thích thêm.

1

Đây là thư trả lời cho user1256561. Cảm ơn ý tưởng của bạn .. tuy nhiên tôi đã không được chăm sóc của các công cụ giải mã url được đề cập trong bước 3.

vì vậy, đây là mã php sẽ giải mã dữ liệu biểu mẫu được tuần tự hóa, nếu có ai khác cần dữ liệu đó. Nhân tiện, hãy sử dụng mã này theo quyết định của riêng bạn.

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 đầu vào bài dữ liệu sẽ như thế nào: attribute1 = value1 & attribute2 = value2 & attribute3 = value3 và vân vân

Sản lượng mã trên vẫn sẽ nằm trong một mảng và bạn có thể sửa đổi nó để có được nó được gán cho bất kỳ biến nào bạn muốn và nó phụ thuộc vào cách bạn muốn sử dụng dữ liệu này hơn nữa.

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

// jQuery bài

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

// serialized jquery.post var - TO - PHP dạng mảng

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

// Bạn nhận được bất kỳ cùng mà

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

Đó là chính xác những gì tôi đang tìm kiếm! –

3

Tại sao không sử dụng mảng kết hợp, vì vậy bạn có thể sử dụng nó asily

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

    return $returndata; 
} 

Trân

+3

Tôi không nhận được '$ i = 0;' – Thielicious

7

Trong HTML trang:

<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> 

trên PHP page:

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

trên mã php này, trở về f1 lĩnh vực.

4

Modified Murtaza Hussain câu trả lời:

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

Bạn chỉ cần giá trị tên thuộc tính trong mẫu.Ví dụ:

Mẫu

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

Đơn giản chỉ cần làm điều này

 $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']); 
Các vấn đề liên quan