2016-04-04 1 views
2

submit()の形式から最後にダウンロードされたファイルを取得しますが、forループを使用して複数のファイルをダウンロードすることが期待されます。私はJavaScriptとjQueryの新機能です。助けてください。最後のファイルのみが反復されたform.submit()アクションでダウンロードされます

認証用のトークン(TOKEN)とファイル参照番号(fileId)を受け取る特定のWeb API URL(WEBAPIURL)にリクエストを送信しています。私はすべてのパラメータを正しく提供しました。私は個々のファイルをダウンロードすることができますが、forループで複数のファイルをダウンロードすることはできません。最後のファイルのみがダウンロードされます。

for(id in fileIDs){ 

    var form = $('<form></form>').attr('action', WEBAPIURL).attr('method', 'post'); 
    form.append($('<input></input>').attr('type', 'hidden').attr('name', "token").attr('value', TOKEN)); 
    form.append($('<input></input>').attr('type', 'hidden').attr('name', "fileId").attr('value', fileIDs[id])); 
    form.appendTo('body').submit().remove(); 
} 
+0

あなたは私たちの全体のコードだけではなく、ループを示すべきであるが、最も可能性の高い、 'VARフォームは= ...'ループ内で新しいフォームで前のフォームを上書きして、あなただけの最後で終わりますone – adeneo

+0

私はあなたがしていることを得ることはありません。送信するために、隠し値のフォームを追加および削除しています。小さな問題が1つあります。最初に送信すると、ページが再読み込みされます。したがって、他の提出は決して起こりません。このために[AJAX](http://api.jquery.com/jquery.ajax/)を使用する必要があるようです。どんな種類のファイルをダウンロードしていますか? – Mikey

+0

@Justinあなたは特定のWeb APIを使用しているので、ドキュメントをチェックして複数のファイルを同時にダウンロードできるようにする必要があります。それ以外の場合は、それぞれのファイルに対して1つのリクエストを呼び出す必要があります – shivgre

答えて

0

あなたは私はあなたが、複数のフィールドに同じ名前を使用していますが、複数の値のために[]で配列名を使用する必要があり、その後、あなたの$ _POSTにサーバー側の配列を取得すべきだと思う提供した情報を制限するものから、 。

for(id in fileIDs){ 

    var form = $('<form></form>').attr('action', WEBAPIURL).attr('method', 'post'); 

    //I don't know what you are doing with TOKEN, make this as array if needed 
    form.append($('<input></input>').attr('type', 'hidden').attr('name', "token").attr('value', TOKEN)); 

    //edit here in field name to make it a array of field 
    form.append($('<input></input>').attr('type', 'hidden').attr('name', "fileId[]").attr('value', fileIDs[id])); 
    form.appendTo('body').submit().remove(); 
} 
+0

例をありがとう。しかし、私はサーバーの動作を変更することはできません。サーバーは各要求に対してトークンとファイル参照番号を受け取り、バイナリデータ(ファイル)を返します。 Btw、私は同じfor-loopingを行うことができますが、フォーム要求の代わりにiFrameを使用します。 iFrameは正常に動作します。同じfor-loopingからすべてのファイルをダウンロードしました。しかし、iFrameの方法はIEでは正しく機能しません。私は本当に 'form.submit'がそれぞれのリクエストに対してダウンロードを起動できない理由を知りたいです。 – Justin

+0

@Justin私はcurlを使ってapiを呼び出して応答を得ることができましたが、curlがどのようにファイルの応答を処理するかはわかりません。あなたのWEBAPIに関する限られた情報から、私は一度に単一のfileIDで作業することを意図していると思います。APIドキュメントを参照して、渡して呼び出しているサンプルまたはEndpointパラメーターで記述した内容を確認できます。 – shivgre

+0

@Justin Oh、フォームアクションで呼び出したAPI ENDPOINTは、Content-Dispositionとして1つのファイルだけを返しているため、1つのファイルしかダウンロードされません – shivgre

関連する問題