0

私のフォームは、JavaScript アラートを使用してユーザーと通信します。これは、私が働いている会社で推奨される方法です (php ハンドラー ファイルとの間で常にリダイレクトされるのではなく)。

このため、すべてのフォーム データを jquery のいくつかの簡単な検証に渡し、ajax 経由で php ハンドラーに送信します。これが私がやっている方法の基本的な見方です...

var first_name = $(sender + ' #first_name');
var email = $(sender + ' #email');
var tel = $(sender + ' #telephone');
var comments = $(sender + ' #comments');

$.ajax({
    type: 'POST',
    url: 'sendmail.php',
    data: { first_name: first_name.val(),
        email: email.val(),
        telephone: tel.val(),
        comments: comments.val(),
        success: function clearFields() {
            first_name.val('');
            email.val('');
            tel.val('');
            comments.val('');
            alert('Thank you. We will contact you as soon as possible.');
        }
    }
});

次のようなフォームにファイル入力フィールドを追加しましたが、アップロードに問題があります。電子メールは正しく送信されますが、ajax がアップロードに使用できるデータを php ファイルに送信しているとは思いません

<input type="file" name="upload" id="upload" />

<script>

var upload = $("#upload");
$.ajax({
    type: 'POST',
    url: 'sendmail.php',
    data: { first_name: first_name.val(),
        email: email.val(),
        telephone: tel.val(),
        upload: upload.val(),
        comments: comments.val(),
        success: function clearFields() {
            first_name.val('');
            email.val('');
            tel.val('');
            upload.val('');
            comments.val('');
            alert('Thank you. We will contact you as soon as possible.');
        }
    }
});
</script>

これには多くのオプションが見つかりましたが、これなど、私が見たものはすべて「ハック」に思えます。

これを行う簡単な方法はありますか?

4

2 に答える 2

1

fileAjax はアップロード操作をサポートしていません。しかし、iframe を利用してファイルを非同期にアップロードするプラグインはたくさんあります。このテクニックの詳細については、こちらをご覧ください

フォームのアップロードをサポートするいくつかの jQuery プラグインは次のとおり
です。 1. jQuery フォーム
2. jQuery-File-Upload

これに関する多くの Q&A サイトには、このような質問の回答がたくさんあります。

ここでは、FormData を使用する html 5 を使用した別のソリューションについて説明します。

于 2013-02-27T08:39:28.780 に答える
0

IFrame を介してこれを行う必要があります

したがって、非表示の iframe を作成します

<iframe id="upload_target" name="upload_target" style="display: none;" src="#"></iframe>
<!-- note the src="#" -->

次に、いくつかのボタンと必要なすべてのフィールドを含むフォームを作成します

<form action="path/to/uploadscript.php" method="POST" enctype="multipart/form-data" target="upload_target">
<!--target will tell the browser to run it in the iFrame with name="upload_target" -->

次に、uploadscript.php で、すべてのフォーム値を通常の $_POST 値であるかのように使用できます。

<?php upload_file($_FILES['file'], $_POST['name'], $_POST['whatever']); ?>

これは、AJAX を使用する場合とほとんど同じです。

于 2013-02-27T08:45:56.210 に答える