6

私は自分のウェブサイトにajaxを使用しています。jQuery.ajax()ファイルをサーバーに非同期にアップロードすることに成功しました。私は使用DajaxしてDajaxiceいるので、ファイルのアップロードにもこれらのアプリケーションを使用する予定です。この例を試しました。正常に動作しています。しかし、html フォームにファイル フィールドを追加すると、サーバーにファイルが送信されません。私のhtmlフォームは次のようになります

<form id="myform" action="/file/" method="post" enctype="multipart/form-data">
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='AaSmyBEwQLSD3YghRAD9Cf2uxEjzESUe' /></div>
<p><label for="id_docfile">Select a file</label> max. 42 megabytes</p>
<p><input type="file" name="docfile" id="id_docfile" /></p>
<p><input type="submit" value="Upload" /></p>
</form>

この質問は多くの場所で尋ねられましたが、答えられませんでした。

4

2 に答える 2

1

Afaik 現在、dajax / dajaxice 内にファイルをアップロードするための規定はありません。

私はいくつかのプロジェクトで dajax を使用しましたが、blueimp/jquery-file-uploadJSONと、アップロード ファイルの POST を受け入れてクライアントに文字列を返す django ビューを使用して、これを回避しました。

jquery-file-upload ボタンは通常の html フォーム要素とはスタイルが異なるため、これは完全な解決策とは言えません。jQuery-ui を使用してフォーム全体をスタイル設定することは可能ですが、これには多くの追加作業が必要です。

Java のほとんどの dajax である dwr とdjangoのおいしいパイの両方がファイルのアップロードを提供するため、理論的にはそれを実装できるはずです。

私の ajax ソリューションのサンプルが役立つと思われる場合は、喜んで投稿します。

于 2013-11-09T21:44:22.973 に答える
1

私も最近この問題に直面しました。それで、私は少し掘り下げて、いくつかの答えを発見しました。

正常に動作しています。しかし、html フォームにファイル フィールドを追加すると、サーバーにファイルが送信されません。

serialize()ドキュメントの例で使用されているメソッドがあります。しかし、jQuery docによると:

ファイル選択要素からのデータはシリアル化されません。

また、JS はクライアント ブラウザーの外部にアクセスできないため、ajax ファイルのアップロードを取得する明確な方法はありません。なので、を使って作るのは無理だと思いますdajaxice

私が見つけた最も簡単なハックは、targetオプションを使用してフォームを非表示の iframe に投稿することです。

<form method='POST' action='/upload' enctype='multipart/form-data' target='submit-iframe'>

そのため、iframe のみが更新されます。js を使用すると、load()イベントをキャッチしてデータを取得できます。

ここに記載されているより詳細なプロセス

于 2013-11-10T14:45:50.483 に答える