Причина, по которой это происходит, заключается в том, что iframe
использует запасную стратегию, которую использует ajaxSubmit
.Я думаю, что поскольку ответ публикуется в iframe
, IE пытается выяснить, как его опустить, и решает, что он хочет попросить вас загрузить ответ, а не просто вставить его в iframe
.
.Я столкнулся с этой же ситуацией некоторое время назад и нашел статью (которую я не могу найти сейчас), в которой предлагается обходной путь.
Если вы окружите свой ответ json textarea
никто не будет жаловаться (IE, FF, Chrome, возможно, Safari), и вы получите правильный анализ вашего ответа.
Например, если вы возвращаете
{Id: 1, Name: 'Me'}
, просто верните:
<textarea>{Id: 1, Name: 'Me'}</textarea>
Теперь вы видите, что IE думает, что это html, поэтому он вставляет его в скрытый iframe
.Ваша ajaxSubmit
функция по-прежнему вызывается и правильно анализирует JSON, а затем все становятся довольны.:)
Если вы используете ASP.NET MVC, вы можете безбожно скопировать этот метод расширения:)
public static class ControllerExtensions
{
public static ActionResult JsonSafe(this IController controller, object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return new WriteResult(string.Format("<textarea>{0}</textarea>", serializer.Serialize(obj)));
}
}