0

次のような入力フォームがあります<input type="text" name="record_date[] ...

フォームを他のphpファイルに送信するajaxの部分は

var values = $("form").serialize();
$.ajax({
type: 'POST',
data: { 'Values' : values },
dataType: 'json',

他のphpファイルはデータを受け取ります

$values = $_POST['Values'];

理解できるように、これparse_str($_POST['Values'],$output);は配列を作成します($output配列です)

しかし、これprint_r(json_encode($output));では何も表示されません(値などを含む配列が表示されると予想されます)

使用するecho json_encode($output['record_date']);と、すべてが機能し、入力された値が取得されます。

配列を作成してから、このように配列を使用しようとしています

 foreach ($output as $i=>$output_value ) {
 echo json_encode($output_value[$i]);
 }

これに変更しましecho json_encode($output_value['record_date'][$i]);たが、どちらの場合も何もエコーしません。

私が理解しているように、主な質問はparse_str($_POST['Values'],$output);php配列に「変更/変換」する方法です

$_POST['Values']次のようになります。record_date%5B%5D=02.07.2013&record_date%5B%5D=01.07.2013

おそらく、他のparse_str何かを使用する必要がある代わりに

アップデート

ajax の使用dataType: 'json',と php の場合

foreach ($output as $key => $output_value) {
echo json_encode($output_value);
}

その後、何も取得しません。

コメントdataType: 'json',の場合は、["02.07.2013","01.07.2013"] を参照してください。

代わりにecho json_encode($output_value);使用する場合は、 のecho $output_value;長いリストを参照してくださいArrayArrayArrayArrayArray

内部でforeach使用するvar_dump($output_value);場合は、このように参照してください

array(2) { [0]=> string(1) "2" [1]=> string(1) "6" } 
...............
array(2) { [0]=> string(10) "02.07.2013" [1]=> string(10) "01.07.2013" }

内部でforeachecho $output[$key][0]が必要なことをしているようです...

最終的に、そのようなコードを使用する必要があるという結論に達しました

foreach ($output[record_date] as $key => $output_value) {
echo $output_value. ' output value<br>';
echo $output[other_name_from_html_input][$key]. ' output date selector value<br>';
}
4

1 に答える 1

1

parse_str()は実際に必要なことを行います。

parse_str($_POST['Values'], $output);
foreach ($output as $key => $output_value) {
    echo json_encode($output_value);
}

あなたの問題は、 foreach ループがどのように機能するかを理解していないことでした。$output_valueはすでに現在の反復の配列要素の値であるため、インデックスで使用する必要はありません。インデックスを使用する場合は、次のように元の配列で使用する必要があります。

foreach ($output as $key => $output_value) {
    echo json_encode($output[$key]);
}

よく読んでください: PHP: foreach

しかし、私を混乱させるものがあります。投稿データ自体として渡すことができるのに、シリアル化されたフォームデータを単一の値として渡すのはなぜですか? この場合、使用する必要はなくparse_str()、コードは次のようになります。

JS:

var values = $("form").serialize();
$.ajax({
type: 'POST',
data: values,
dataType: 'json',

PHP:

foreach ($_POST as $value) {
    echo json_encode($value);
}
于 2013-07-18T12:47:27.937 に答える