回答:
PHPでjquery serialize
メソッドから何かを逆シリアル化する必要はありません。データをシリアライズする場合、GETメソッドのajaxリクエストを使用している場合はクエリパラメータとしてPHPに送信し、POSTのajaxリクエストを使用している場合はvarsを送信する必要があります。そのため、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シリアル化された変数-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);
}
});
次に、PHPで通常行うようにPOST配列キーにアクセスできます。だけで試してくださいprint_r()
。
シリアル化されたフォームの値をオブジェクトのプロパティでラップしていると思いますが、これは私が知る限りでは役に立ちません。
お役に立てれば!
これはuser1256561への返信です。あなたのアイデアをありがとう..しかし、私はステップ3で言及されたurlデコードのものを処理していません。
だから、他の誰かがそれを必要とするなら、シリアライズされたフォームデータをデコードする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;
}
?>
フォーム名をその値から分離する必要があると思います。これを行う1つの方法は、(&)
を取得するために分解することです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' );