Podczas debugowania aplikacji jQuery, które używają AJAX, często mam potrzebę zobaczenia json, który jest zwracany przez usługę do przeglądarki. Więc upuszczę adres URL danych JSON na pasku adresu.
Z ASPNETem to fajnie, bo w przypadku błędu kodowania widzę diagostykę ASPNET w przeglądarce:
Ale kiedy kod po stronie serwera działa poprawnie i faktycznie zwraca JSON, IE prosi mnie o pobranie, więc nie widzę odpowiedzi.
Czy mogę sprawić, aby IE tego NIE robił, innymi słowy, aby wyświetlał go tak, jakby był zwykłym tekstem?
Wiem, że mógłbym to zrobić, jeśli ustawię nagłówek Content-Type na text/plain
.
Ale jest to konkretnie kontekst aplikacji ASPNET MVC, która automagicznie ustawia odpowiedź, gdy używam JsonResult w jednej z moich metod akcji. Chciałbym również zachować odpowiedni typ zawartości i nie zmieniać go tylko po to, aby wspierać debugowanie.
Odpowiedzi:
Znalazłem odpowiedź.
Aktualizując rejestr, można skonfigurować IE8 do wyświetlania aplikacji / json w oknie przeglądarki. Nie ma potrzeby korzystania z zewnętrznego narzędzia. Nie testowałem tego ogólnie, ale działa z IE8 na Vista.
Aby z tego skorzystać, pamiętaj, że mają zastosowanie wszystkie zwykłe zastrzeżenia dotyczące aktualizacji rejestru. Zatrzymaj IE. Następnie wytnij i wklej następujące elementy do pliku o nazwie
json-ie.reg
.Następnie kliknij dwukrotnie plik .reg. Uruchom ponownie IE. Nowe zachowanie, które pojawia się podczas łaskotania adresu URL, który zwraca dokument z
Content-Type: application/json
lubContent-Type: text/json
jest takie:Co to robi, dlaczego to działa:
Jest
25336920-03F9-11cf-8FD0-00AA00686F13
to identyfikator CLSID dla akcji „Przeglądaj w miejscu”. Zasadniczo ten wpis rejestru mówi IE, że w przypadku dokumentów, które mają typ MIME aplikacji / json, po prostu wyświetl go na miejscu. Nie wpłynie to na żadne dokumenty aplikacji / json pobrane za pomocą<script>
tagów lub przez XHR i tak dalej.Klucze CLSID i kodowanie dostać te same wartości używane do
image/gif
,image/jpeg
, itext/html
.Ta wskazówka pochodzi z tej strony oraz z artykułu Microsoftu Handling MIME Types in Internet Explorer .
W FF nie potrzebujesz też zewnętrznego dodatku. Możesz po prostu użyć
view-source:
pseudo-protokołu. Wprowadź adres URL podobny do tego w pasku adresu:Ten pseudo-protokół był obsługiwany w IE, także do czasu WinXP-sp2, kiedy Microsoft wyłączył go ze względów bezpieczeństwa.
źródło
reg add "HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json" /t REG_SZ /d "{25336920-03F9-11cf-8FD0-00AA00686F13}"; reg add "HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json" /v Encoding /t REG_DWORD /d 0x08000000
text/json
klucza.Miałem podobny problem. Używałem jQuery "$. GetJSON" i wszystko działało idealnie w Firefoksie i Chrome.
Ale to nie działało w IE. Próbowałem więc bezpośrednio uzyskać dostęp do adresu URL json, ale w IE zapytałem, czy chcę pobrać plik.
Po długich poszukiwaniach zauważyłem, że w wyniku musi znajdować się nagłówek z typem treści, w moim przypadku typem treści był:
Ale kiedy strona, która wysłała żądanie, otrzyma ten plik json, w IE, musisz określić TEN SAM RODZAJ TREŚCI, w moim przypadku:
uściski
źródło
text/plain; charset=UTF-8
. Nie ma potrzeby tekst / html.Powyższego rozwiązania brakowało, a poniższy kod powinien działać w każdej sytuacji:
Po prostu zapisz plik json.reg i uruchom, aby zmodyfikować rejestr.
źródło
Jeśli wystarczy, że IE otworzy JSON w notatniku, możesz zmienić domyślny program systemu dla plików .json na Notatnik.
Aby to zrobić, utwórz lub znajdź plik .json, kliknij prawym przyciskiem myszy i wybierz opcję „Otwórz za pomocą” lub „Wybierz program domyślny”.
Może się to przydać, jeśli przez przypadek chcesz użyć przeglądarki Internet Explorer, ale Twoja firma informatyczna nie pozwoli Ci edytować rejestru. W przeciwnym razie polecam powyższe odpowiedzi.
źródło
Używam Skrzypek z JSONViewer plugin do wglądu JSON. Nie sądzę, aby możliwe było sprawienie, by IE zachowywał się bez majstrowania przy rejestrze. Oto kilka informacji.
źródło
Zmiana ustawień typu MIME JSON w IE wpłynie na sposób, w jaki IE traktuje wszystkie odpowiedzi JSON.
Zmiana nagłówka typu MIME na tekst / html skutecznie powie każdej przeglądarce, że zwracana odpowiedź JSON nie jest JSON, ale zwykłym tekstem.
Żadna z opcji nie jest preferowana.
Zamiast tego chciałbyś użyć wtyczki lub narzędzia, takiego jak wspomniany wyżej Fiddler lub dowolny inny serwer proxy inspektora ruchu sieciowego, w którym możesz za każdym razem wybrać sposób przetwarzania odpowiedzi JSON.
źródło
text/html
nie informuje przeglądarki, że odpowiedź jest zwykłym tekstem, ale HTML. Jeśli zdecydujesz, że chcesz mieć zwykły tekst, użyjtext/plain
. W przeciwnym razie możesz mieć kilka interesujących luk w zabezpieczeniach XSS.FireFox + FireBug jest bardzo dobry do tego celu. W IE jest pasek narzędzi programisty, z którego nigdy nie korzystałem i nie zamierzam używać, więc nie mogę udzielić zbyt wielu opinii.
źródło
Właśnie miałem ten sam problem z XMLHttpRequest. Witryna działa bez zarzutu w Chrome i FF, a także w dziesiątkach przeglądarek Internet Explorer w produkcji. Ta JEDNA maszyna (oczywiście ta, którą nasza firma konfiguruje jako maszynę demonstracyjną) zdecydowała, że zapyta o zapisanie odpowiedzi json na żądanie Ajax.
Zaakceptowane rozwiązanie regedit poniżej naprawiło to. Dzięki.
źródło
Odpowiedź można było zobaczyć w Fiddler: http://www.fiddler2.com/fiddler2/
To fajne narzędzie do takich rzeczy!
źródło