От известно време си играя с JSON, просто го изтласквам като текст и това не е навредило на никого (доколкото знам), но бих искал да започна да правя нещата правилно.
Виждал съм толкова много предполагаеми "стандарти" за типа съдържание JSON:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
Но кой от тях е правилен или най-добър? Предполагам, че има различни проблеми със сигурността и поддръжката на браузърите.
Знам, че има подобен въпрос, Какъв тип MIME, ако JSON се връща от REST API?, но бих искал да получа малко по-целенасочен отговор.
За JSON текст:
application/json
MIME медийният тип за JSON текст е
application/json
. Кодирането по подразбиране е UTF-8. (Източник: RFC 4627).
За JSONP (изпълним javascript) с обратна връзка:
application/javascript
Ето някои публикации в блогове, които бяха споменати в коментарите и които са от значение.
Разбира се, правилният MIME медиен тип за JSON е application/json
, но е необходимо да осъзнаете какъв тип данни се очакват във вашето приложение.
Например, аз използвам Ext GWT и отговорът на сървъра трябва да се изпрати като text/html, но съдържа JSON данни.
Страна на клиента, слушател на формуляри Ext GWT
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");
}
});
В случай на използване на тип отговор application/json браузърът ми предлага да запазя файла.
Изходна част от кода от страна на сървъра, използваща 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);
}
};
Ако извиквате ASP.NET Web Services от страната на клиента, трябва да използвате application/json
, за да работи. Смятам, че това е същото и за фреймуърците jQuery и Ext.