Jeg har rodet rundt med JSON i et stykke tid, bare skubbe det ud som tekst, og det har ikke skadet nogen (som jeg kender til), men jeg vil gerne begynde at gøre tingene ordentligt.
Jeg har set så mange påståede "standarder" for JSON-indholdstypen:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
Men hvilken er korrekt eller bedst? Jeg forstår, at der er sikkerheds- og browserunderstøttelsesproblemer, der varierer mellem dem.
Jeg ved, at der er et lignende spørgsmål, Hvilken MIME-type, hvis JSON returneres af et REST API?, men jeg vil gerne have et lidt mere målrettet svar.
For JSON-tekst:
application/json
MIME-medietypen for JSON-tekst er
application/json
. Standardkodningen er UTF-8. (Kilde: RFC 4627).
For JSONP (kørbart javascript) med callback:
application/javascript
Her er nogle blogindlæg, der blev nævnt i kommentarerne, og som er relevante.
Selvfølgelig er den korrekte MIME-medietype for JSON application/json
, men det er nødvendigt at vide, hvilken type data der forventes i dit program.
Jeg bruger for eksempel Ext GWT, og serverresponset skal gå som text/html, men indeholder JSON-data.
Client side, Ext GWT form listener
uploadForm.getForm().addListener(new FormListenerAdapter()
{
@Override
public void onActionFailed(Form form, int httpStatus, String responseText)
{
MessageBox.alert("Error");
}
@Override
public void onActionComplete(Form form, int httpStatus, String responseText)
{
MessageBox.alert("Success");
}
});
Ved brug af application/json svartype foreslår browseren, at jeg gemmer filen.
Server side kildekodeuddrag ved hjælp af Spring MVC
return new AbstractUrlBasedView()
{
@SuppressWarnings("unchecked")
@Override
protected void renderMergedOutputModel(Map model, HttpServletRequest request,
HttpServletResponse response) throws Exception
{
response.setContentType("text/html");
response.getWriter().write(json);
}
};
Hvis du kalder ASP.NET-webservices fra klientsiden, skal du bruge application/json
, for at det virker. Jeg mener, at dette er det samme for jQuery og Ext frameworks.