互換モードの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!" } };
次のような音SO質問はあなたに関係があるかもしれません:
どうすればIEダウンロードを提案するのではなく、単にアプリケーションjsonを表示する =
そうでない場合:
Ajaxオプションで期待されるdataTypeを設定しようとしましたか?つまり、dataType: 'json'
「application/json」や「text/javascript」などの他のコンテンツタイプを試しましたか
おそらく正しい方法ではありませんが、コンテンツタイプをtext/htmlに設定すると、IEが正しく処理されます。
return Json(result, "text/html");
F12ツールがIE9で提供するすべてのバージョンで動作します。
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);
を呼び出すことができます...
Json(data, "text/plain")
を使用することを忘れずにこれは、そうでなければ jQuery File Upload によって作成されたものなど、IE8およびIE9で「開くまたは保存」メッセージを表示するjson要求で機能します。
POST methodを使用してajaxリクエストを送信しようとしましたか?サーバーから結果を返す間、コンテンツタイプを 'text/x-json'に設定することもできます。
悲しいことに、これはInternet Explorerを使用することのもう1つの迷惑な癖です。
簡単な解決策は、PCで小さな.regファイルを実行して、IE toautomaticallyopen .jsonファイルを開く/保存するかどうかについて悩むのではなく。
ここに必要なファイルのコピーを入れました。
これを実行するには管理者権限が必要です。
応答を返す前に、content-typeを「application/json」サーバー側ではなく「text/html」に変更しました。他のソリューションも追加されているブログ投稿で説明しました:
http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/
上記の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」アラートを生成しました。
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
への応答を強制すると、ブラウザはそれをダウンロードしようとします。リクエストと同じコンテンツタイプを使用すると、どのブラウザでも機能します。
私の場合、コンソールにJS構文エラーがある場合(正確にはどこでもかまいません)、dataType: 'json'
はまったく効果がありません。