0

これは、「 AJAX を介して単一の送信ボタンで複数の HTML フォームを送信する」というタイトルの最後の質問の続きであり、非常に基本的な AJAX から始めたものだと思います。この質問を完全に理解するには、本当にその質問を読む必要があります。この質問の鍵は、他の変数データです...

したがって、jQueryで実行する基本的なAJAX送信スクリプトがあります。これは、以前の質問の回答と重複しており(「ボタン」から「input#publishimages」への変更を除いて)、複数のフォームを繰り返して送信するのにうまく機能しますモール:

function post_form_data(data) {
    $.ajax({
        type: 'POST',
        url: 'verify.php',
        data: data,
        success: function () {},
        error: function () {}
    });
}

$('input#publishimages').on('click', function () {
    $('form').each(function () {
        post_form_data($(this).serialize());
    });
});

送信されているフォーム (各フォームは 1 つの画像に等しいため、各画像を送信するために必要な回数だけ繰り返します。詳細は以前の質問を参照してください) も前の質問にあり、次のようになります。

<form id="image<?php echo $i; ?>">
   <label>Name</label>
   <input name="image[<?php echo $i; ?>][Name]" />

   <label>Location</label>
   <input name="image[<?php echo $i; ?>][Location]" />

   <!-- etc, etc, for description, coordinates, camera etc -->

</form>

振り返ってみると、悲しいことに、それは少し骨抜きにされすぎていました。ここで、他の可変データビットが機能します。現在、追加情報について各画像の EXIF データを調べており、ユーザーがフォームに入力する必要があるデータが見つかった場合はフォームから入力を削除し、そうでない場合は入力を表示してユーザーが入力できるようにしています。自分自身を出します。そのため、フォームを含む PHP スクリプトは次のようになります (疑似コード)。

<form id="image<?php echo $i; ?>">
   <label>Name</label>
   <input name="image[<?php echo $i; ?>][Name]" />

   // Examine EXIF Data

   if (I find EXIF Location Data) {

       $_POST['image'][$i]['location'] = $location;

   } else {

       <label>Location</label>
       <input name="image[<?php echo $i; ?>][Location]" />

   }

  // etc, etc, similar situation occurs with camera make + model, date taken etc.

</form>

したがって、私が行っていることがわかるのは、情報が見つかった/見つからなかった場合に、フォームへの入力を動的に選択的に削除および追加することです。見つかった場合は、スーパーグローバルに情報を送信します$_POST。そうでない場合は、フォームに入力をエコーアウトして、ユーザーが入力できるようにします。どうしたの?ジャバスクリプト。

これは問題です...

さて、参照すると$(this)(もちろん を参照$('form'))、いくつかの変数 (抽出できた EXIF データの量に応じて) のみが AJAX 経由で宛先に送信されます。存在しません-代わりに、それらを$_POSTスーパーグローバルに割り当てましたが、jquery スクリプトからアクセスできなくなりました。

そう...

投稿されたか、フォームの一部として送信されたかに関係なく、AJAX を介して画像に関連するすべてのものを送信先に送信できる方法が必要です。私はこれを達成する方法について完全に途方に暮れています...何か提案はありますか?

4

2 に答える 2

1

あなたは「二重提出」しています。AJAX関数内でクリックをインターセプトし、デフォルトを防ぎます。

$('input#publishimages').on('click', function (e) {
    e.preventDefault();
    $('form').each(function () {
        post_form_data($(this).serialize());
    });
});

これにより、フォームの送信が停止されます。送信されたフォームは、とにかくPOSTまたはGETリクエストに他なりません。

それ以外は、あなたが何を達成しようとしているのか混乱しています。検証ステップのためにデータが不完全なように聞こえますか?ユーザーがフォームを送信すると、一部のEXIFデータが取得され、不足しているデータとともに新しい入力が返されますが、EXIFデータは0と1のパフに溶け込んでいますね。その場合は、非表示のフォームフィールドを使用できます。

if (I find EXIF Location Data) {

    $_POST['image'][$i]['location'] = $location;
    echo '<input type="hidden" value="$foo" name="$bar" />;

} else {

    <label>Location</label>
    <input name="image[<?php echo $i; ?>][Location]" />

}
于 2013-03-11T15:00:37.120 に答える
1

すべての入力を保持することができます。EXIF に既存のデータがある場合は、単純に入力して、CSS でユーザーからの入力を非表示にします。このようにして、フォームをより一般的な方法で処理でき、問題はなくなります。

于 2013-03-11T12:20:58.367 に答える