[英]IE wants to download my JSON response; other browsers work as expected
我的搜索使我相信這是為響應設置標題的問題。 此應用程序是使用Zend框架構建的,以下是設置的標頭(此響應包含有關文件上傳的信息):
$response
->setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT')
->setHeader('Cache-Control', 'private, no-cache')
->setHeader('Pragma', 'no-cache')
->setHeader('Content-Disposition', 'inline; filename="files.json"')
->setHeader('X-Content-Type-Options', 'nosniff')
->setHeader('Content-type', 'application/json; charset=UTF-8');
這是“ files.json”的內容:{“ webpath”:“ http://www.domain.com/avatar/38b/3ef/f8b/a4c62a71.jpg”,“ file_id”:“ 484”,“高度”:250,“寬度”:250}
編輯:我在所有版本的IE(包括IE9)中都遇到此問題。 我也嘗試對Content-type使用'text / plain',但無濟於事。 還將拼寫錯誤固定在“私人”一詞上。
您是否嘗試過將Content-Disposition設置為“內聯”(即刪除'; filename =“ files.json”')?
當我返回json時,我在whateverAction()
設置了以下whateverAction()
:
$this->getResponse()->setHttpResponseCode(200);
$this->getResponse()->setHeader('Content-Type', 'application/json');
$this->getResponse()->setBody($Json());
就是這樣,僅此而已,它可以在所有瀏覽器中使用。 無論如何,我可以測試的所有內容,包括IE 9。
如果瀏覽器要求您下載JSON文檔,則不會出錯。 默認情況下,瀏覽器不顯示內聯內容類型正確的JSON,除非您安裝了某些擴展名(例如Firefox中的JSONView)。
如果您只想查看由腳本創建的JSON,請使用此類擴展名或暫時使用文本內容類型(例如text/plain
或text/javascript
)。 在其他情況下,則應保留原樣,因為應使用適當的內容類型發送JSON。
標頭告訴IE下載文件。 我會刪除
->setHeader('Content-Disposition', 'inline; filename="files.json"')
因為我認為這會觸發下載。
如果不是這種情況,我將首先刪除所有標頭,然后檢查它們是否都正確編寫(請參閱“專用”),並先進行無標頭測試,然后逐個添加它們,以找出哪個觸發了您的問題。 然后,請寫出哪一個,以便進一步查看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.