2017-02-09 18 views
0

私は、ファイルを返すか、エラーが発生した場合はJSON応答を返すurlを持っています。要求が受け入れられると、ファイルで応答し、ユーザーはダウンロードを促されます(その状況で予想されるように)。リクエストに問題がある場合、レスポンスはJSONオブジェクトであり、javascript経由でさらに処理する必要があります。ファイルまたはJSON応答を返すURL上のAJAX?

リクエストはjavascript(AJAX、新しいタブで開く、iframeを生成したものなど)を介して行われます。 javascriptを使用して同じURLからの両方の応答を処理するにはどうすればよいですか?


私は(まだ働いて持っていない)いじり現在だ戦略は次のとおりです。

  1. errorイベントを設定しIFRAME
  2. にフォームを注入するのiframe
  3. を生成しますハンドラのiframeの
  4. フォームのトリガーの投稿(私はContent-Disposition: attachmentを使用して保存ダイアログを強制的に使用できるように応答ヘッダーを制御しています)
  5. errorイベント・ハンドラがトリガされる場合は、JSONレスポンス

のためのiframeをスクラップはerrorイベントは、アイフレームによって発射されていないとiframeがあるときloadイベントは特定のブラウザで焼成されていないが判明します保存ダイアログを表示するファイルを指しています。

+0

エラーが発生した場合は、成功のための型応答に関係なく、Function(jqXHR jqXHR、String textStatus、String errorThrown)を取得します。問題ではないはずです –

+0

@BryanDellingerそれは本当です。ただし、成功すると、ユーザーは提供されたファイルをダウンロードするように指示する必要があります。私が知りたいのは、同じリクエストの可能なエラー応答を捕捉している間に、(通常のダウンロードでは)保存するためにユーザーに応答を提出する方法です。 – Ouroborus

+0

これは、html5のダウンロード属性を使用して示唆しているhttp://stackoverflow.com/questions/3077242/force-download-a-pdf-link-using-javascript-ajax-jqueryここに似た質問があります。 –

答えて

1

このURLをヒットする前に、関数呼び出しがファイルを返すようにするために、いくつかのパラメータが存在する必要があるようです。

最初にそのURLのシリアル化しているデータをチェックする関数を記述します。この関数は、直列化しているデータが検証に合格した場合にurlを呼び出すか、直列化しているデータが検証に失敗した場合にエラーJSON応答を返すことができます。

シリアル化前のデータの検証は、クライアント側でjavascriptを使用するか、サーバー側で行うことができます。理想的には、クライアントとサーバーの両方で検証する必要があります。

関連する問題