jQuery.ajaxを使用してテストするため、非常にうまく機能するFormData()を作成しました。しかし、アップロード用のプログレスバーが必要なため、jQuery.ajaxを使用すると作成できませんでした。そこで、ajaxを直接使用してフォームデータを投稿することにしました。しかし、phpを使用してフォームデータを取得することはできません。
javascript
xhr.open("POST","assets/php/upload.php?action=uploadFiles");
xhr.setRequestHeader('Cache-Control', 'no-cache');
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
xhr.send(newFormData);
php
print_r($_FILES); //output, empty array
これは私の質問です、なぜphpを使用してフォームデータを取得できないのですか?
編集::
これはjqueryを使用してプログレスバーを作成しようとしたものですが、うまく機能しませんでした。プログレスバーは非常に速く完了し、ファイルはまだアップロードされていません。
function updateProgress(evt)
{
// evt is an ProgressEvent.
if (evt.lengthComputable)
{
var percentLoaded = Math.round((evt.loaded / evt.total) * 100);
// Increase the progress bar length.
$(".progress > div").css(
{
width: percentLoaded + '%'
});
}
}
$.ajax(
{
url: 'assets/php/upload.php?action=uploadFiles',
type: 'POST',
data: newFormData,
cache: false,
xhr: function ()
{
myXhr = $.ajaxSettings.xhr();
if (myXhr.upload)
{
myXhr.upload.addEventListener('progress', updateProgress, false);
}
return myXhr;
},
contentType: false,
processData: false,
});
編集::
$_FILESを使用してajaxリクエストを取得できない理由をついに見つけました。これは、コンテンツタイプを設定したために発生しましたが、リクエストから削除すると、ajaxリクエストを取得できます。ただし、ファイルのアップロードがまだ完了していないときに、プログレスバーがすぐに完成します。私のコードの問題はどこにありますか?
ありがとう、アリレザ