FormData
ファイルを処理できる AJAX/pJAX リクエストでオブジェクトを使用する必要があるようです。詳細については、Mozilla Developer Networkを参照してください。
たとえば、これがフォームの場合:
<form enctype="multipart/form-data">
<input name="file" type="file" />
<input type="button" value="Upload" />
</form>
最初に次のようにファイルの内容を取得します。
var formData = new FormData($('form')[0]);
$.ajax
次に、jQueryリクエストまたは次のXMLHttpRequest();
ような単純なものを使用できます。
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://foo.com/processfile.php");
xhr.send(formData);
または同様にjQueryで:
$.ajax({
url: 'http://foo.com/processfile.php',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false
});
サーバー側ではprocessfile.php
、次の方法でファイルの内容を受信/表示できます。
$file = $_FILES['file']['name'];
これは非同期であるため、pJAX で動作するはずです。このリクエストは必ず pJAX リクエストの前に配置してください。jQuery を使用している場合は、成功コールバックの一部として追加できます。例 (使用している pJAX ライブラリを知らなくても):
$.ajax({
url: 'http://foo.com/processfile.php',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function(data) {
$.pjax({url: url, container: '#pjax-container'});
}
});
編集: IE7+ をサポートしたい場合は、FormData が Internet Explorer 10 でのみサポートされているため、アップロードに非表示の iframe 要素を使用するようにフォールバックする必要があります。 //fineuploader.com/ https://github.com/malsup/form (jquery.form プラグイン)よりも優れている/使いやすいと思います。