ใช้$('#form').serialize()
ฉันสามารถส่งสิ่งนี้ผ่านไปยังหน้า PHP ตอนนี้ฉันจะ unserialize ใน PHP ได้อย่างไร มันต่อเนื่องใน jQuery
ใช้$('#form').serialize()
ฉันสามารถส่งสิ่งนี้ผ่านไปยังหน้า PHP ตอนนี้ฉันจะ unserialize ใน PHP ได้อย่างไร มันต่อเนื่องใน jQuery
คำตอบ:
คุณไม่ควรทำการ unserialize อะไรใน PHP ด้วยserialize
วิธีjquery หากคุณทำให้ข้อมูลเป็นอนุกรมคุณควรส่งไปยัง PHP เป็นพารามิเตอร์การสืบค้นหากคุณใช้เมธอด GET ajax หรือ post 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 Post
var arraydata = $('.selector').serialize();
// jquery.post ต่อเนื่องรูปแบบ var - TO - PHP Array
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) {
$returndata = array();
$strArray = explode("&", $str);
$i = 0;
foreach ($strArray as $item) {
$array = explode("=", $item);
$returndata[$array[0]] = $array[1];
}
return $returndata;
}
ความนับถือ
$i = 0;
Murtaza Hussainดัดแปลงแล้วตอบ:
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()
เพียงแค่ลองด้วย
ฉันคิดว่าคุณกำลังห่อค่าแบบฟอร์มต่อเนื่องในคุณสมบัติของวัตถุซึ่งไม่มีประโยชน์เท่าที่ฉันรู้
หวังว่านี่จะช่วยได้!
นี่คือการตอบกลับไปยัง 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
)
คุณเพียงต้องการชื่อแอตทริบิวต์ค่าในแบบฟอร์ม ตัวอย่าง:
แบบฟอร์ม
<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>
จาวาสคริ
$(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 รับอาเรย์ไม่จำเป็นต้อง unserialize;)
ฉันคิดว่าคุณต้องแยกชื่อแบบฟอร์มจากค่าของวิธีการหนึ่งที่จะทำคือจะระเบิดเพื่อที่คุณจะได้รับ(&)
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' );