4

これについて頭を悩ませてきました:PHPでjquery.form(http://malsup.com/jquery/form)を使用しています...$_FILES['someimage']設定されていますが、エラー番号は常にUPLOAD_ERR_NO_FILE、サイズも0です。

JavaScript:

$('form input[type=file]').change(function () {
    $(this).clone().appendTo('#imgform');
    $('#imgform').ajaxForm();
    $('#imgform').ajaxSubmit({
        type: 'POST'
    });
});

に追加します:

<form id="imgform" method="POST" action="/api/images.php" enctype="multipart/form-data"></form>

bog-standardファイル入力を持つ別のフォームから。

PHPログはクリーンですが、var_dump$ _ FILESを実行すると、インデックスがフォーム要素の名前に設定されていることが常に示されますが、データは示されません。

みんなありがとう!(申し訳ありませんが、jQueryのような質問はこれらの部分で頻繁に発生します)。

編集私は、詳細情報と提案された代替案を含むJavascriptのファイル入力要素のクローン を見つけました。

私がやろうと決めたのは、JavaScript以外のブラウザー用の単一のフォームを用意することです。JavaScript/ jQueryは、単一のフォームを3つのフォームに分割します。

Head form -> File upload form -> tail form

次に、ファイルのアップロードを非同期で投稿できます。テールの送信をクリックすると、フォームが単なるテキストフィールドであるため、フォームをPOSTに貼り付けます。

4

2 に答える 2

2

これを実行しようとすると、2 つのことがわかります。複製してから追加しているので、ファイル入力がフォームのコンテキスト内に存在するかどうか疑問に思います。そうでない場合は、$('form input[type=file]')複製される要素が見つかりません。

ただし、おそらく最大の問題は、ブラウザーがファイル アップロード コントロールを処理する方法にあります。プログラムでファイル入力コントロールに値を設定することはできません。そうしないと、Web 開発者がファイル アップロード値を自動的に "c:\Files\MyPasswordFile.txt" に設定し、ユーザーに見えないようにフォームを自動的に送信するのは簡単なことです。

あなたのコードをこれに変更したとき:

<input type="file" name="imageFile" />
<form id="imgform" method="POST" action="/api/images.php" enctype="multipart/form-data">

</form>

<script>
  $('input[type=file]').change(function() {
    alert("ACTION");
    $(this).clone().appendTo('#imgform');
    //$('#imgform').ajaxForm();
    //$('#imgform').ajaxSubmit(
    //        {
    //          type: 'POST'
    //        }
    //    );
  }); 
</script>

上記の動作を確認できます - フィールドは複製されて追加されます - しかし、値はありません。複製プロセスの一部にはフィールド値の設定が含まれるため、これはそのセキュリティ制限に違反し、失敗します。

于 2010-05-18T10:55:14.653 に答える
0

セキュリティ上の理由から、javascript はローカル ハード ドライブにアクセスできないため、ajax を使用してファイルを投稿することはできません。

iFrame を使用して ajax 投稿を模倣する方法があります。このリンクは良い例です。

http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html

于 2010-05-18T10:54:09.340 に答える