Beim Debuggen von jQuery-Apps, die AJAX verwenden, muss häufig der JSON angezeigt werden, der vom Dienst an den Browser zurückgegeben wird. Also werde ich die URL für die JSON-Daten in die Adressleiste einfügen.
Dies ist gut mit ASPNET, da ich im Falle eines Codierungsfehlers die ASPNET-Diagostik im Browser sehen kann:
Wenn der serverseitige Code jedoch ordnungsgemäß funktioniert und JSON tatsächlich zurückgibt, fordert mich der IE auf, ihn herunterzuladen, sodass die Antwort nicht angezeigt wird.
Kann ich den IE dazu bringen, das NICHT zu tun, mit anderen Worten, es einfach so anzuzeigen, als wäre es einfacher Text?
Ich weiß, dass ich dies tun könnte, wenn ich den Content-Type-Header auf setze text/plain
.
Dies ist jedoch speziell der Kontext einer ASPNET MVC-App, die die Antwort automatisch festlegt, wenn ich JsonResult für eine meiner Aktionsmethoden verwende. Außerdem möchte ich den entsprechenden Inhaltstyp beibehalten und nicht nur ändern, um die Debugging-Bemühungen zu unterstützen.
Antworten:
Ich habe die Antwort gefunden.
Sie können IE8 so konfigurieren, dass application / json im Browserfenster angezeigt wird, indem Sie die Registrierung aktualisieren. Es ist kein externes Tool erforderlich. Ich habe dies nicht allgemein getestet, aber es funktioniert mit IE8 unter Vista.
Denken Sie daran, dass alle üblichen Einschränkungen beim Aktualisieren der Registrierung gelten. Stoppen Sie den IE. Schneiden Sie dann Folgendes aus und fügen Sie es unter dem Namen in eine Datei ein
json-ie.reg
.Doppelklicken Sie dann auf die REG-Datei. Starten Sie den IE neu. Das neue Verhalten, das Sie beim Kitzeln einer URL erhalten, die ein Dokument mit
Content-Type: application/json
oderContent-Type: text/json
wie folgt zurückgibt :Was es macht, warum es funktioniert:
Das
25336920-03F9-11cf-8FD0-00AA00686F13
ist die CLSID für die „Browse in place“ Aktion. Grundsätzlich sagt dieser Registrierungseintrag dem IE, dass für Dokumente, die einen MIME-Typ von Anwendung / JSON haben, diese einfach an Ort und Stelle angezeigt werden. Dies wirkt sich nicht auf Anwendungs- / JSON-Dokumente aus, die über<script>
Tags oder XHR usw. heruntergeladen wurden .Die CLSID und Encoding Schlüssel bekommen die gleichen Werte für verwendet
image/gif
,image/jpeg
undtext/html
.Dieser Hinweis stammt von dieser Site und aus dem Artikel von Microsoft zum Umgang mit MIME-Typen in Internet Explorer .
In FF benötigen Sie auch kein externes Add-On. Sie können einfach das
view-source:
Pseudoprotokoll verwenden. Geben Sie eine URL wie diese in die Adressleiste ein:Dieses Pseudoprotokoll wurde auch im IE unterstützt, bis WinXP-sp2, als Microsoft es aus Sicherheitsgründen deaktivierte.
quelle
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
Schlüssel.Ich hatte ein ähnliches Problem. Ich habe die jQuery "$. GetJSON" verwendet und in Firefox und Chrome hat alles perfekt funktioniert.
Aber es hat im IE nicht funktioniert. Also habe ich versucht, direkt auf die URL von json zuzugreifen, aber im IE wurde gefragt, ob ich die Datei herunterladen möchte.
Nach langem Suchen stellte ich fest, dass das Ergebnis einen Header mit einem Inhaltstyp enthalten muss. In meinem Fall war der Inhaltstyp:
Aber wenn die Seite, die die Anfrage gestellt hat, diesen JSON erhält, müssen Sie im IE den gleichen Inhaltstyp angeben, in meinem Fall:
Umarmungen
quelle
text/plain; charset=UTF-8
. Keine Notwendigkeit für Text / HTML.Die obige Lösung fehlte, und der folgende Code sollte in jeder Situation funktionieren:
Speichern Sie einfach die Datei json.reg und führen Sie sie aus, um Ihre Registrierung zu ändern.
quelle
Wenn Sie damit einverstanden sind, dass der IE den JSON nur in einem Editor öffnet, können Sie das Standardprogramm Ihres Systems für JSON-Dateien in Notepad ändern.
Erstellen oder suchen Sie dazu eine JSON-Datei, klicken Sie mit der rechten Maustaste und wählen Sie "Öffnen mit" oder "Standardprogramm auswählen".
Dies kann nützlich sein, wenn Sie zufällig den Internet Explorer verwenden möchten, Ihr IT-Unternehmen jedoch nicht zulässt, dass Sie Ihre Registrierung bearbeiten. Ansonsten empfehle ich die obigen Antworten.
quelle
Ich verwende Fiddler mit dem JSONViewer- Plugin, um JSON zu überprüfen. Ich denke nicht, dass es möglich ist, IE dazu zu bringen, sich zu verhalten, ohne vielleicht mit der Registrierung herumzuspielen. Hier sind einige Informationen.
quelle
Das Ändern der JSON-MIME-Einstellungen des IE wirkt sich auf die Art und Weise aus, wie der IE alle JSON-Antworten behandelt .
Wenn Sie den Header vom Typ MIME in Text / HTML ändern, wird jedem Browser effektiv mitgeteilt, dass die von Ihnen zurückgegebene JSON-Antwort nicht JSON, sondern einfacher Text ist.
Keine der Optionen ist vorzuziehen.
Stattdessen möchten Sie ein Plugin oder Tool wie den oben genannten Fiddler oder einen anderen Proxy-Proxy für den Netzwerkverkehr verwenden, bei dem Sie jedes Mal auswählen können, wie die JSON-Antwort verarbeitet werden soll.
quelle
text/html
teilt dem Browser nicht mit, dass es sich bei der Antwort um einfachen Text handelt, sondern um HTML. Wenn Sie sich für einfachen Text entscheiden, verwenden Sietext/plain
. Andernfalls kann es zu interessanten XSS-Schwachstellen kommen.FireFox + FireBug ist für diesen Zweck sehr gut geeignet. Für IE gibt es eine Entwickler-Symbolleiste, die ich noch nie verwendet habe und verwenden möchte, sodass ich nicht viel Feedback geben kann.
quelle
Ich hatte gerade das gleiche Problem mit einer XMLHttpRequest. Die Site funktioniert einwandfrei in Chrome und FF sowie in Dutzenden von Internet Explorer-Browsern in der Produktion. Diese EINE Maschine (die unsere Firma natürlich als Demomaschine einrichtet) hat beschlossen, die JSON-Antwort auf eine Ajax-Anfrage zu speichern.
Die unten akzeptierte Regedit-Lösung hat das Problem behoben. Vielen Dank.
quelle
Sie konnten die Antwort in Fiddler sehen: http://www.fiddler2.com/fiddler2/
Das ist ein schönes Werkzeug für solche Dinge!
quelle