7

了解しました。これが私の状況です。AJAXフォームの送信やその他の関連する同期および非同期リクエストを処理するJavaScriptクラスがあります。データを収集し、このデータをリクエストの一時ストレージに設定してから、一時ストレージデータを使用してリクエストを行います。

例えば:

  • ユーザーはリクエストの作成を開始し、NAMEとLASTNAMEをフォームに入力します
  • このデータはオブジェクト変数SUBMITDATAに入れられます
  • 要求が行われると、このデータは別の変数TEMPSUBMITDATAに複製されます。
  • リクエストが完了すると、リクエストの作成に使用されたデータは引き続き利用可能です(デバッグまたはその他の目的で)

これは、2つのリクエストが同じオブジェクトを介して同時に進行している場合でも、これらのリクエストを行うために使用されたデータにアクセスできることを意味します。

HTML5 FileListとFormDataを使用するまでは、すべてが期待どおりに機能します。JavaScriptでオブジェクトのクローンを作成するのは比較的簡単ですが、FileListのクローンを作成することはできません。次に例を示します。

<html>
<head>
    <script type="text/javascript">
        // This method is used to clone data objects
        function clone(object){
            if(object==null || typeof(object)!=='object'){
                return object;
            }
            // This line throws the error when FileList data is attempted to be cloned
            var tmp=object.constructor();
            for(var key in object){
                tmp[key]=clone(object[key]);
            }
            return tmp;
        }

        // This is an example data storage
        var submitData=new Object();
        submitData['some-data']='abc';

        function uploader(files){

            submitData['my-files']=files;

            // This clones the object and leads to the error because of FileList
            var tempSubmitData=clone(submitData);

            // HERE WOULD THE ACTUAL FORM SUBMIT HAPPEN
            // THIS EXAMPLE IS SHOWN FOR EASIER READING OF
            // THE PROBLEM EXPLAINED ABOVE

        }
    </script>
</head>
<body>
    <input type="file" name="myfile" value="" onchange="uploader(this.files);"/>
</body>

これは私の質問につながります、私は-まったく-このタイプのデータを何らかの方法で複製して、要求が完了するまでそれを保存できるようにすることができますか?それとも、毎回新しいオブジェクトを作成する唯一の方法ですか?

私のクラスは別のアプリケーションのように機能し、後でリクエストの追跡に役立つログやその他のデータがあり、どのような場合でも非常にうまく機能するため、新しいオブジェクトソリューションは私には適していません-今までHTML5FileListに出くわしましたおよびFormDataの使用。

どんな助けでもいただければ幸いです!

4

1 に答える 1