開始用IE9測試我的jQuery應用程序。看起來我可能會在這裏遇到一些麻煩。 我注意到當我將JSON數據返回給Javascript方法時,我總是得到這個提示:「你想打開還是保存這個文件?」併爲我提供3個按鈕:打開,保存和取消。當然,我的JavaScript正在基於JSON對象中設置的值進行操作,但由於IE9沒有將它傳遞給腳本,因此我無法執行後續操作。IE9 JSON數據「你想打開還是保存這個文件」
其他人面臨這個問題?這是一個快照。
開始用IE9測試我的jQuery應用程序。看起來我可能會在這裏遇到一些麻煩。 我注意到當我將JSON數據返回給Javascript方法時,我總是得到這個提示:「你想打開還是保存這個文件?」併爲我提供3個按鈕:打開,保存和取消。當然,我的JavaScript正在基於JSON對象中設置的值進行操作,但由於IE9沒有將它傳遞給腳本,因此我無法執行後續操作。IE9 JSON數據「你想打開還是保存這個文件」
其他人面臨這個問題?這是一個快照。
其實你是對的@EricLaw。在Json結果中設置內容類型之後,它工作。 我不得不添加下面幾行:
result.ContentEncoding = System.Text.Encoding.UTF8;
result.ContentType = "application/json; charset=UTF-8
如果有人使用ASP.net MVC,並試圖解決這個問題 - 我用下面建在MVC框架方法。只需更新JsonResult上的內容類型和編碼即可。
public ActionResult Index(int id)
{
// Fetch some data
var someData = GetSomeData();
// Return and update content type and encoding
return Json(someData, "text/html", System.Text.Encoding.UTF8,
JsonRequestBehavior.AllowGet);
}
這解決了我的問題!
昨天我也遇到了這個問題,WebAPI返回了一列URL(異步上傳文件)。
只需將WebAPI服務的內容類型設置爲「text/html」而不是默認的「application/json; charset = UTF-8」即可。我以JSON字符串的形式得到響應,然後使用$ .parseJSON將其轉換爲JSON對象。
public async Task<HttpResponseMessage> Upload()
{
// ...
var response = Request.CreateResponse(HttpStatusCode.OK, files);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response;
}
// result is an iframe's body content that received response.
$.each($.parseJSON(result.html()), function (i, item)
{
console.log(item.Url);
});
感謝您對webapi的迴應。我有這個確切的問題,並設置ContentType的工作。我嘗試通過CreateResponse重載設置「text/html」,但MVC拋出一個異常,說明找不到格式化程序(僅支持json和xml)。 – 2012-11-12 21:37:51
我也面臨同樣的問題,我試過這個解決方案,但它產生的轉換錯誤:不能隱式地將類型'System.Net.Http.HttpResponseMessage'轉換爲'System.Threading.Tasks.Task
@Vipul:我認爲你的任務方法有問題,你可以在這裏複製你的代碼嗎? – 2012-11-28 09:55:16
在我的情況時的contentType響應頭是 「應用/ JSON;字符集= UTF-8」,則IE 9示出了提示。但更改爲「文本/ HTML」,然後提示不顯示,雖然所有水獺瀏覽器與「應用程序/ JSON;字符集= UTF-8」罰款。
其實IE8也是壞的,需要改變。 – philw 2016-05-06 09:53:18
(答案最初發布的this question)
如果使用MVC,處理這種情況如下實施基本控制器中,你覆蓋(隱藏)JSON(對象)方法的一種方法:
public class ExtendedController : Controller
{
protected new JsonResult Json(object data)
{
if (!Request.AcceptTypes.Contains("application/json"))
return base.Json(data, "text/plain");
else
return base.Json(data);
}
}
現在,您的控制器都可以繼承所有和ExtendedController只需撥打return Json(model);
...
Json(data, "text/plain")
這適用於JSON請求,否則將在IE8中顯示「打開或保存」消息& IE9例如由jQuery File Upload
我使用「text/html」而不是「text/plain」,但這可能是由我在客戶端上使用的特定實現引起的。只要提到它有同樣的問題的人。 – 2013-05-20 22:47:46
所做的那些IE9從服務器返回JSON響應的HTTP頭是什麼? – BigFatBaby 2011-03-22 09:08:36
您是否在不同的瀏覽器(例如FF)中嘗試了相同的頁面?你在IE 9中啓用了JavaScript嗎? – Xhalent 2011-03-22 09:10:31
你幾乎肯定會發送錯誤的MIME Content-Type,或者做一些非常奇怪的事情,比如將JSON響應發送回IFRAME標記。重播URL可以讓我們輕鬆看到。 (啓用與禁用JS完全沒有區別)。 – EricLaw 2011-03-22 13:32:52