Во время отладки приложений jQuery, использующих AJAX, мне часто приходится видеть, что json, который возвращается службой браузеру. Поэтому я отброшу URL-адрес данных JSON в адресную строку.
Это хорошо с ASPNET, потому что в случае ошибки кодирования я могу видеть диагональ ASPNET в браузере:
Но когда серверный код работает правильно и фактически возвращает JSON, IE предлагает мне загрузить его, поэтому я не вижу ответа.
Могу ли я заставить IE НЕ делать это, другими словами, просто отображать его, как если бы это был обычный текст?
Я знаю, что мог бы сделать это, если бы я задал заголовок Content-Type text/plain
.
Но это, в частности, контекст приложения ASPNET MVC, который автоматически устанавливает ответ, когда я использую JsonResult для одного из моих методов действий. Также я хочу сохранить соответствующий тип контента, а не изменять его только для поддержки усилий по отладке.
Я нашел ответ.
Вы можете настроить IE8 на отображение приложения /json в окне браузера, обновив реестр. Нет необходимости в внешнем инструменте. Я не тестировал это широко, но он работает с IE8 на Vista.
Чтобы использовать это, помните, что все обычные оговорки об обновлении реестра применяются. Остановить IE. Затем вырежьте и вставьте следующее в файл по имени json-ie.reg
.
Windows Registry Editor Version 5.00
;
; Tell IE to open JSON documents in the browser.
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00
Затем дважды щелкните файл .reg. Перезапустите IE. Новое поведение, которое вы получаете при щекотке URL-адреса, возвращающего документ с помощью Content-Type: application/json
или Content-Type: text/json
, выглядит следующим образом:
Что он делает, почему он работает:
25336920-03F9-11cf-8FD0-00AA00686F13
- это CLSID для действия "Browse in place". В основном эта запись в реестре сообщает IE, что для документов, которые имеют тип mime application/json, просто просмотрите его на месте. Это не повлияет на любые документы приложения /json, загруженные с помощью тегов <script>
или через XHR, и так далее.
Клавиши CLSID и Encoding получают те же значения, что и для image/gif
, image/jpeg
и text/html
.
Этот намек получен из этого сайта и из статьи Microsoft Обработка MIME Типы в Internet Explorer.
В FF вам также не нужно внешнее дополнение. Вы можете просто использовать псевдопротокол view-source:
. Введите URL-адрес, подобный этому, в адресную строку:
view-source:http://myserver/MyUrl/That/emits/Application/json
Этот псевдопротокол поддерживался в IE также до WinXP-sp2, когда Microsoft отключила его по соображениям безопасности.
У меня была аналогичная проблема. Я использовал jQuery "$. GetJSON", и все отлично работало в Firefox и Chrome.
Но это не сработало в IE. Поэтому я попытался получить прямой доступ к URL-адресу json, но в IE он спросил, хочу ли я загрузить файл.
После долгих поисков я увидел, что в результате должен быть заголовок с типом контента, в моем случае тип содержимого:
header("Content-type: text/html; charset=iso-8859-1");
Но когда страница, на которой запрос получил этот json, в IE вам нужно указать SAME CONTENT-TYPE, в моем случае было:
$.getJSON (
"<? site_url php echo (" ajax / tipoMenu ")?>"
{contentType: 'text / html; charset = utf-8'},
function (result) {
обнимает
Выше решения не хватало, а ниже код должен работать в любой ситуации:
Windows Registry Editor Version 5.00
;
; Tell IE to open JSON documents in the browser.
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/x-json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00
Просто сохраните файл json.reg и запустите, чтобы изменить свой реестр.
Если у вас все в порядке, если IE откроет JSON в блокноте, вы можете изменить свою системную программу по умолчанию для .json файлов в Блокнот.
Для этого создайте или найдите файл .json, щелкните правой кнопкой мыши и выберите "Открыть с" или "Выбрать программу по умолчанию".
Это может пригодиться, если вы случайно захотите использовать Internet Explorer, но ваша ИТ-компания не позволит вам редактировать свой реестр. В противном случае я рекомендую приведенные выше ответы.
Изменение параметров Mime-типа IE JSON будет влиять на то, как IE обрабатывает все ответы JSON.
Изменение заголовка mime-типа в text/html эффективно скажет обозревателю, что ответ JSON, который вы возвращаете, не JSON, а обычный текст.
Ни один из вариантов не является предпочтительным.
Вместо этого вы хотели бы использовать плагин или инструмент, например, вышеупомянутый Fiddler или любой другой прокси-сервер инспектора сетевого трафика, где вы можете каждый раз выбирать, как обрабатывать ответ JSON.
text/html
не сообщает браузеру, что ответом является простой текст, но HTML. Если вы решили, что хотите простой текст, используйте text/plain
. В противном случае вы можете столкнуться с некоторыми интересными уязвимостями XSS.
Я использую Fiddler с JSONViewer для проверки JSON. Я не думаю, что можно заставить IE вести себя, не пускаясь с реестром. Вот информация.
У меня была такая же проблема с XMLHttpRequest. Сайт функционирует безупречно в Chrome и FF и десятки десятков обозревателей Internet Explorer в производстве. Конечно, эта машина ONE (одна наша компания настраивается на демонстрационную машину) решила, что она предложит сохранить json-ответ на запрос ajax.
Принятое решение regedit ниже зафиксировано. Спасибо.
Вы можете увидеть ответ в Fiddler: http://www.fiddler2.com/fiddler2/
Это хороший инструмент для таких вещей!
FireFox + FireBug очень хорош для этой цели. Для IE есть панель инструментов разработчика, которую я никогда не использовал и не намерен использовать, поэтому я не могу предоставить много отзывов.