8

jQueryまたはIFrames(つまり純粋なJavaScript)なしでAJAXフォーム送信を行うことは可能ですか?現在、動作するstrutsfileUploadActionに送信しています。アクションのコードは非同期送信でも機能しますか、それとも非同期フォーム送信を取得するために追加が必要ですか?

私はStruts1.xを使用していますが、現在のフォームは次のとおりです。

<html:form action="fileUploadAction" method="post" enctype="multipart/form-data">
    ...form elements...
    <html:file property="theFile" />
    ...other elements...
</html:form>

このフォームを送信して、ファイルをAJAXでアップロードできますか?

4

3 に答える 3

14

私があなたが正しいと理解した場合は、次のコードを使用してファイルを非同期にアップロードできます。好きなように変更してください

var AjaxFileUploader = function () {
    this._file = null;
    var self = this;

    this.uploadFile = function (uploadUrl, file) {
        var xhr = new XMLHttpRequest();
        xhr.onprogress = function (e) {
            ...
        };

        xhr.onload = function (e) {
            ...
        };

        xhr.onerror = function (e) {
            ...
        };

        xhr.open("post", uploadUrl, true);

        xhr.setRequestHeader("Content-Type", "multipart/form-data");
        xhr.setRequestHeader("X-File-Name", file.name);
        xhr.setRequestHeader("X-File-Size", file.size);
        xhr.setRequestHeader("X-File-Type", file.type);

        xhr.send(file);
    };
};

AjaxFileUploader.IsAsyncFileUploadSupported = function () {
    return typeof (new XMLHttpRequest().upload) !== 'undefined';
}

 if (AjaxFileUploader.IsAsyncFileUploadSupported) {
        ajaxFileUploader = new AjaxFileUploader();

        $("form").submit(function () {
            var uploader = $("#fileUploader")[0];

            if (uploader.files.length == 0) {
                return;
            } else {
                ajaxFileUploader.uploadFile(
                    "/YourUploadUrl",
                    uploader.files[0]);
            }

            return false;
        });
    }

フォームをアップロードするには、FormDataクラスを使用し、フォーム値を入力してXHRで投稿します。

更新: HTML4の場合、次のことを試してください

于 2012-07-19T07:03:06.167 に答える
3

http://fineuploader.com/はajaxファイルアップローダーです。

このプラグインは、XHRを使用して、FF3.6 +、Safari4 +、Chromeのプログレスバーで複数のファイルをアップロードし、他のブラウザーの非表示のiframeベースのアップロードにフォールバックして、あらゆる場所で優れたユーザーエクスペリエンスを提供します。

于 2012-07-20T17:01:37.467 に答える
-6

jqueryやその他のサードパーティライブラリを追加する必要はありません。IPerfectJSライブラリを追加するだけで、準備は完了です。

IP_uploadFile(URL、responseType、th​​is [object]、[dynamicFunctionForResponse])

ユーザーがresponseTypeを「html」として選択すると、dynamicFunctionForResponseはHTML形式で応答を取得します。以下の例では、アラートで「完了」応答を受け取ります。

HTML

    <script type="text/javascript" src="http://services.iperfect.net/js/IP_generalLib.js"></script>


    <script language='javascript'>
    function testResponse(data){
    alert(data)
    }
    </script>

    <form method="POST" enctype="multipart/form-data"  onsubmit="IP_uploadFile('testupload.php','html',this,testResponse); return false;">
        <input type="file" name="file1">
        <input type="submit" name="submit1" value="Click here">
    </form>

PHP:testupload.php

    move_uploaded_file($_FILES['file1']['tmp_name'], realpath("./")."/upload/".$_FILES["file1"]["name"]);
    echo "done";
于 2015-09-02T10:39:41.977 に答える