2017-02-09 55 views
0

我有一個url,返回一個文件或錯誤的JSON響應。當請求可以接受時,它會響應一個文件,並提示用戶下載文件(正如人們在這種情況下所預期的那樣)。當請求發生問題時,響應是一個JSON對象,應該通過JavaScript進一步處理。返回文件或JSON響應的url上的AJAX?

該請求是通過JavaScript(AJAX,在新標籤中打開,生成iframe,無論)。我該如何去處理通過javascript處理來自同一網址的兩種響應?


的策略,我現在有(沒有得到工作尚未)修修補補是:

  1. 生成一個iframe
  2. 將表單插入iframe的
  3. error事件處理器在iframe上
  4. 觸發器提交表單(我有控制響應標題,所以我可以使用Content-Disposition: attachment來強制保存對話框。)
  5. 如果error觸發事件處理程序,報廢的iframe的JSON響應

原來error事件不被解僱的I幀當iframe是load事件不會在某些瀏覽器發射指向一個觸發保存對話框的文件。

+0

錯誤你得到函數(jqXHR jqXHR,字符串textStatus,字符串errorThrown),無論成功的類型響應。所以不應該是一個問題 –

+0

@BryanDellinger這是真的。但是,成功時應提示用戶下載提供的文件。我想知道的是如何將響應提交給用戶進行保存(就像您可以使用正常下載一樣),同時仍然捕獲相同請求的可能錯誤響應。 – Ouroborus

+0

瞭解它,類似的問題在這裏http://stackoverflow.com/questions/3077242/force-download-a-pdf-link-using-javascript-ajax-jquery它建議使用html5下載屬性 –

回答

1

在點擊該網址之前,似乎在您的情況下,您的某些參數必須存在才能讓您的函數調用提示您返回該文件。

編寫一個函數,首先檢查您正在序列化該網址的數據。如果正在序列化的數據通過驗證,則此函數可以調用url,或者如果正在序列化的數據驗證失敗,則可以返回錯誤JSON響應。

在序列化之前驗證數據可以在客戶端使用javascript完成,也可以在服務器端完成。理想情況下,您需要在客戶端和服務器上進行驗證。