Sử dụng $('#form').serialize()
, tôi đã có thể gửi nó đến một trang PHP. Bây giờ làm thế nào để tôi hủy kích hoạt nó trong PHP? Nó được tuần tự hóa trong jQuery.
Sử dụng $('#form').serialize()
, tôi đã có thể gửi nó đến một trang PHP. Bây giờ làm thế nào để tôi hủy kích hoạt nó trong PHP? Nó được tuần tự hóa trong jQuery.
Câu trả lời:
Bạn không cần phải hủy kích hoạt bất cứ thứ gì trong PHP từ serialize
phương thức jquery . 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 yêu cầu ajax phương thức GET hoặc đăng vars nếu bạn đang sử dụng yêu cầu POST ajax. 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.
Các serialize
phương pháp chỉ mất các yếu tố hình thức và đặt chúng ở dạng chuỗi."varname=val&var2=val2"
serialize
trả về. Xem câu trả lời thực sự phổ biến dưới đây.
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 (sẽ như vậy nếu bạn đang sử dụng jQuery serialize()
):
"param1=someVal¶m2=someOtherVal"
... một cái gì đó như thế này có lẽ là tất cả những gì bạn cần:
$params = array();
parse_str($_GET, $params);
$params
sau đó sẽ là một mảng được mô hình hóa như bạn mong đợi. Lưu ý điều này cũng hoạt động với mảng HTML.
Xem phần sau để biết thêm thông tin: http://www.php.net/manual/en/feft.parse-str.php
Hy vọng điều đó hữu ích. Chúc may mắn!
// Bài viết jQuery
var arraydata = $('.selector').serialize();
// jquery.post định dạng var - TO - PHP Array
parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array
// Bạn nhận được bất kỳ điều tương tự
Array (
[A] => 1
[B] => 2
[C] => 3
[D] => 4
[E] => 5
[F] => 6
[G] => 7
[H] => 8
)
Trong trang 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>
trên trang PHP :
<?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, f1
trường trả về .
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ó dễ dàng
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 trọng
$i = 0;
Murtaza Hussain đã sửa đổi câu trả lời:
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
return $returndata;
}
Đơ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']);
Tôi không biết bạn đang sử dụng phiên bản nào của Jquery, nhưng phiên bản này hoạt động 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 khóa mảng POST như bạn thường làm trong php. Chỉ cần thử với a print_r()
.
Tôi nghĩ rằng bạn đang gói giá trị biểu mẫu nối tiếp trong thuộc tính của đối tượng, điều này là vô ích theo như tôi biết.
Hi vọng điêu nay co ich!
Đây là trả lời cho người dùng1256561. Cảm ơn ý tưởng của bạn .. tuy nhiên tôi đã không quan tâm đến 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 tuần tự, nếu có ai cần nó. Nhân tiện, sử dụng mã này theo ý của 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);
}
Đầu vào dữ liệu bài đăng url sẽ như sau: property1 = value1 & property2 = value2 & property3 = value3, v.v.
Đầu ra của mã ở trên sẽ vẫn ở trong một mảng và bạn có thể sửa đổi 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
)
Bạn chỉ cần tên thuộc tính giá trị trong mẫu. Thí dụ :
Hình thức
<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;
}
?>
Sử dụng:
$( '#form' ).serializeArray();
Php lấy mảng, không cần unserialize;)
Tôi nghĩ bạn cần tách tên biểu mẫu khỏi các giá trị của nó, một phương pháp để làm điều này là phát nổ (&)
để bạn sẽ nhận được attribute=value,attribute2=value
.
Quan đ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.
Dưới đây là các bước mà bạn nên làm theo để được cụ thể hơn.
jQuery
đến một PHP
trang (ví dụ ajax.php
) nơi bạn sử dụng $.ajax
để gửi bằng cách sử dụng bài đăng hoặc nhận.(&)
để phân tách từng thuộc tính. Bây giờ bạn sẽ nhận được property1 = value, property2 = value, bây giờ bạn sẽ nhận được một biến mảng php. ví dụ$data =
array("attribute1=value","attribute2=value")
foreach
trên $data
và explode
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ị đăng với giá trị mà bạn cần, và chèn các thuộc tính và giá trị của nó cho một biến mảng mới, lưu trữ thuộc tính và giá trị của chuỗi nối tiếp.Hãy cho tôi biết nếu bạn cần làm rõ hơn.
Bạn có thể sử dụng chức năng này:
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);
}
Làm thế nào để sử dụng nó
$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );