IE prompts to open or save json result from server

Internet Explorerasp.net Mvc-3Jquery

Internet Explorer Problem Overview


Internet explorer in compatibility mode gets the data from the server in an ajax callback method, and pops-up a dialog if I want to save the data or open. How to get rid of that?

client says:

$.ajax({
        type:'POST',
        data: $("#UIdlgHolder > form").serialize(),
        url: $("#UIdlgHolder > form").attr("action"),
        success: function (data, textStatus, jqXHR) {
			{
				alert(data.message);
			}
}

server answers:

return new JsonResult { Data = new { result = false, message = "Yay!" } };

Internet Explorer Solutions


Solution 1 - Internet Explorer

Even though it's not supposedly the correct way, setting the content type to text/html made IE deal with this correctly for me:

return Json(result, "text/html");

Works in all the version that F12 tools gives you in IE9.

Solution 2 - Internet Explorer

If using MVC, one way of handling this is to implement a base controller in which you override (hide) the Json(object) method as follows:

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);
    }
}

Now, your controllers can all inherit ExtendedController and simply call return Json(model); ...

  • without modifying the response content type for those browsers which play nicely (not <=IE9 !)
  • without having to remember to use Json(data, "text/plain") in your various Ajax action methods

This works with json requests which would otherwise display the "Open or Save" message in IE8 & IE9 such as those made by jQuery File Upload

Solution 3 - Internet Explorer

Sounds like this SO question may be relevant to you:

How can I convince IE to simply display Application json rather than offer to download

If not:

Have you tried setting the dataType expected in the ajax options? i.e. dataType: 'json'

Have you tried other content types such as 'application/json' or 'text/javascript'

Solution 4 - Internet Explorer

Have you tried to send your ajax request using POST method ? You could also try to set content type to 'text/x-json' while returning result from the server.

Solution 5 - Internet Explorer

I changed the content-type to "text/html" instead of "application/json" server side before returning the response. Described it in a blog post, where other solutions have also been added:

http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/

Solution 6 - Internet Explorer

Sadly, this is just another annoying quirk of using Internet Explorer.

enter image description here

The simple solution is to run a small .reg file on your PC, to tell IE to automatically open .json files, rather than nag about whether to open/save it.

I've put a copy of the file you'll need here:

JSON mime type

You'll need to have Admin rights to run this.

Solution 7 - Internet Explorer

Is above javascript code the one you're using in your web application ? If so - i would like to point few errors in it: firstly - it has an additional '{' sign in definition of 'success' callback function secondly - it has no ')' sign after definition of ajax callback. Valid code should look like:

$.ajax({
        type:'POST',
        data: 'args',
        url: '@Url.Action("PostBack")',
        success: function (data, textStatus, jqXHR) {
                alert(data.message);
            }
	});

try using above code - it gave me 'Yay' alert on all 3 IE versions ( 7,8,9 ).

Solution 8 - Internet Explorer

I faced this while using jQuery FileUpload plugin.

Then I took a look in their documentation, most exactly in the Content-Type Negotiation section and followed their suggestion for Ruby/Rails.

render(json: <some-data>, content_type: request.format)

Which fixed the issue for me.

Quick Explanation: for old IE/Opera versions, this plugin will use an iframe with text/plain or text/html content-type, so if you force the response to json, browser will try download it. Using the same content-type as in the request will make it work for any browser.

Solution 9 - Internet Explorer

In my case, IE11 seems to behave that way when there is some JS syntax error in the console (doesn't matter where exactly) and dataType: 'json' has no effect at all.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestioniLemmingView Question on Stackoverflow
Solution 1 - Internet ExplorerItsJasonView Answer on Stackoverflow
Solution 2 - Internet ExplorerChrisView Answer on Stackoverflow
Solution 3 - Internet ExplorerCargowireView Answer on Stackoverflow
Solution 4 - Internet ExplorerTomasz MikuśView Answer on Stackoverflow
Solution 5 - Internet ExplorerAndreasView Answer on Stackoverflow
Solution 6 - Internet ExplorerMike GledhillView Answer on Stackoverflow
Solution 7 - Internet ExplorerTomasz MikuśView Answer on Stackoverflow
Solution 8 - Internet ExplorerRael Gugelmin CunhaView Answer on Stackoverflow
Solution 9 - Internet ExplorerArturView Answer on Stackoverflow