2016-08-11 5 views
0

私はPOSTリクエストを期待してファイルを生成するエンドポイントを持っています。フロントエンドでは、フォームの送信を使用してページをリダイレクトする必要があります。しかし、フォームを動的に生成する必要があります(フロントエンドのさまざまな理由から)。ここでPOST経由のリダイレクト - Firefoxで何も起こっていません

が私の試みである(心に留めて、私はそれは様々なHTTP関連のコンポーネント間で座っているので、コードに束を編集する必要がありました):

sendRedirect(options) { 
    options.form = this.createForm(options.body); 
    options.form.setAttribute('method', 'post'); 
    options.form.setAttribute('action', redirectTo); 
    options.form.submit(); 
} 

createForm(body) { 
    let form = window.document.createElement('form'); 

    return Object.keys(body).reduce((_form, key) => { 
     let i = document.createElement('input'); 
     i.setAttribute('type', 'hidden'); 
     i.setAttribute('name', key); 
     i.setAttribute('value', body[key]); 
     _form.appendChild(i); 
     return _form; 
    }, form); 
} 

上記グーグルクロームで正常に動作します。しかし、firefoxでは、何も起こりません(つまり、form.submit()が実行された後にネットワークリクエストは送信されません)。私はfirefoxのコードを踏んできて、それはうまく実行されているようです(つまり、すべての変数は、想定されているものに設定されています)。コードはform.submit()で実行終了に達し、その後は何もしません。

ありがとうございます。

編集:クエンティンに感謝します。ここで私はそれを動作させるために追加のコードは次のとおりです。

options.form.style.visibility = 'hidden'; 
window.document.getElementsByTagName('body')[0].appendChild(options.form); 

答えて

2

フォームは、Firefoxがそれを提出するために文書の一部である必要があります。

submitを呼び出す前に、それを(例えば)document.bodyに付け加えます。

関連する問題