web-dev-qa-db-ja.com

IEサーバーからjsonの結果を開くか保存するように指示する

互換モードのInternet Explorerは、ajaxコールバックメソッドでサーバーからデータを取得し、データを保存するか開く場合にダイアログをポップアップします。それを取り除く方法は?

クライアントは言う:

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

サーバーの回答:

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

次のような音SO質問はあなたに関係があるかもしれません:

どうすればIEダウンロードを提案するのではなく、単にアプリケーションjsonを表示する =

そうでない場合:

Ajaxオプションで期待されるdataTypeを設定しようとしましたか?つまり、dataType: 'json'

「application/json」や「text/javascript」などの他のコンテンツタイプを試しましたか

14
Cargowire

おそらく正しい方法ではありませんが、コンテンツタイプをtext/htmlに設定すると、IEが正しく処理されます。

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

F12ツールがIE9で提供するすべてのバージョンで動作します。

36
ItsJason

MVCを使用する場合、これを処理する1つの方法は、次のようにJson(object)メソッドをoverride(非表示)にするベースコントローラーを実装することです。

_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);を呼び出すことができます...

  • うまく再生するブラウザの応答コンテンツタイプを変更せずに(<= IE9ではありません!)
  • さまざまなAjaxアクションメソッドでJson(data, "text/plain")を使用することを忘れずに

これは、そうでなければ jQuery File Upload によって作成されたものなど、IE8およびIE9で「開くまたは保存」メッセージを表示するjson要求で機能します。

31
Chris

POST methodを使用してajaxリクエストを送信しようとしましたか?サーバーから結果を返す間、コンテンツタイプを 'text/x-json'に設定することもできます。

2
Tomasz Mikuś

悲しいことに、これはInternet Explorerを使用することのもう1つの迷惑な癖です。

enter image description here

簡単な解決策は、PCで小さな.regファイルを実行して、IE toautomaticallyopen .jsonファイルを開く/保存するかどうかについて悩むのではなく。

ここに必要なファイルのコピーを入れました。

JSON mimeタイプ

これを実行するには管理者権限が必要です。

2
Mike Gledhill

応答を返す前に、content-typeを「application/json」サーバー側ではなく「text/html」に変更しました。他のソリューションも追加されているブログ投稿で説明しました:

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

2
Andreas

上記のJavaScriptコードは、Webアプリケーションで使用しているものですか?もしそうなら-私はそれにいくつかのエラーを指摘したいと思います:まず-'success'コールバック関数の定義に追加の '{'記号があります-ajaxコールバックの定義後に ')'記号がありません。有効なコードは次のようになります。

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

上記のコードを使用してみてください-すべての3 IEバージョン(7,8,9)で「Yay」アラートを生成しました。

1
Tomasz Mikuś

jQuery FileUpload plugin を使用しているときにこれに直面しました。

次に、ドキュメントを見て、最も正確に Content-Type Negotiationセクション を見て、Ruby/Rails

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

これで問題が解決しました。

簡単な説明:IE/Operaの古いバージョンでは、このプラグインはtext/plain または text/html content-type。したがって、jsonへの応答を強制すると、ブラウザはそれをダウンロードしようとします。リクエストと同じコンテンツタイプを使用すると、どのブラウザでも機能します。

0

私の場合、コンソールにJS構文エラーがある場合(正確にはどこでもかまいません)、dataType: 'json'はまったく効果がありません。

0
Artur Beljajev