1

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リクエストを取得できます。ただし、ファイルのアップロードがまだ完了していないときに、プログレスバーがすぐに完成します。私のコードの問題はどこにありますか?

ありがとう、アリレザ

4

3 に答える 3

0

実際、そこに$_FILESを生成するものは何もありません。そして、さらに重要なことは、PHPでAJAXを直接使用することはできません... javascriptを使用する場合、何をしprint_r($_FILES)ますか?ブラウザはphpではなくAJAXリクエストを送信します。したがって、borwserがページをロードした場合、$_FILESを使用して出力を直接読み取ることはできません。他のページは$_FILESを読み取る必要があります...そしてAJAXを使用してアップロードするにはjsupload ...を使用します。

于 2012-09-18T19:24:08.327 に答える
0

これを行うには、pluploadを使用できます。

パーセントで要素を更新する方法をカバーする例はここにありますhttp://www.plupload.com/example_custom.php

モジュールをダウンロードすると、チャンクで機能するphpコードも含まれます(これは、必要なファイルアップロード動作を実現するために必要なものです)。

于 2012-09-19T07:50:55.437 に答える
0

HTML5を利用したAjaxファイルのアップロードとこのプロジェクトを確認してください: HTML5AJAXファイルアップローダー

このファイルは、AJAXアップロード用のHTML5ファイルAPIの利用を簡素化するJavaScriptオブジェクトを提供します。

于 2012-09-20T17:58:40.423 に答える