×

contenttype json

contenttype json(jquery ajax中contentType参数为什么会影响后台页)

admin admin 发表于2023-02-18 10:56:33 浏览39 评论0

抢沙发发表评论

本文目录

jquery ajax中contentType参数为什么会影响后台页


jquery ajax中contentType参数的确会影响后台收到的数据,默认的话,如果json对象太复杂,会导致收不到,需要自定义一个数据类型:
application/x-www-form-urlencoded 这种形式是没有办法将复杂的 JSON 组织成键值对形式(当然也有方案这点可以参考 ) ,你传进去可以发送请求,但是服务端收到数据为空, 因为 ajax 没有办法知道怎样处理这个数据。
这怎么可以呢?
聪明的程序员发现

content-type application/json 请求 服务端怎么获取请求数据


  1. 在Android/java平台上实现POST一个json数据:
    JSONObject jsonObj = new JSONObject();
    jsonObj.put(“username“, username);
    jsonObj.put(“apikey“, apikey);
    // Create the POST object and add the parameters
    HttpPost


springmvc 怎么设置content-type为 application/json


1、ajax的设置
《bean id=“mappingJacksonHttpMessageConverter“
class=“org.springframework.http.converter.json.MappingJackson2HttpMessageConverter“》
《property name=“supportedMediaTypes“》
《list》
《value》application/json;charset=UTF-8《/value》
《/list》
《/property》
《/bean》
2、某一个请求
@RequestMapping(value = “/xx“,produces=“application/json;charset=UTF-8“)

jquery ajax的一个问题,contentType写的是application/json,但是response headers里却是别的


你取消这个参数的传人试试,contentType
一般都指定dataType就可以了。
或许你返回的结果不是json格式?然后自动转换失败了?
先检查下你输出的json 放到bejson上去测试下

如何设置Response中的ContentType


如何设置Response中的ContentType
ajax开发中, 常遇到下面的几种情况:
1 服务端需要返回一段普通文本给客户端 
2 服务端需要返回一段HTML代码给客户端 
3 服务端需要返回一段XML代码给客户端 
4 服务端需要返回一段javascript代码给客户端 
5 服务端需要返回一段json串给客户端
================================
对于每一种返回类型 规范的做法是要在服务端指定 response的contentType 的. 
(当然 不指定绝大多数情况下也没什么问题 尤其是返回“非xml“的时候)
Java代码 复制代码
   1. 普通文本 : text/plain  
   2. HTML代码 : text/html  
   3. XML代码 : text/xml 
 
以上三个可以说是毫无争议的, 也没什么值得讨论的, 
但是另外两种情况 就要注意一下了.
javascript 的 contentType 按最标准的写法 应该是 application/javascript. 
而常用的 text/javascript 已经被 rfc定义为废弃的. 
(参见 rfc4329)
但是 在这里暂时不建议使用 application/javascript . 
大家还是继续使用 text/javascript 为好. 
因为很多老旧浏览器并不支持 application/javascript . 
而所有浏览器都支持 text/javascript. 
在标准和广泛的兼容性之间 还是暂且选择后者吧.
json 的 contentType 常见写法有 : text/json & text/javascript . 
但是 这个 text/json 其实是根本不存在的, 
而 text/javascript 在有些时候客户端处理起来会有歧义. 
对于json的contentType , rfc里定义的标准写法是 :application/json. 
(参见 rfc4627)
在这里毫无疑问 我们应该选择标准写法的 application/json.
====================== 
也许有人会问, 设置这些有什么用呢? 
以前一些程序没有设置这些东西 运行的也很好啊.
首先必须承认的一点是, 这些信息 在目前绝大多数情况下 确实不设置也可以. 
但是这种做法是不规范不标准的.
未来对于复杂的ajax应用 ,不规范的行为是会带来很大的隐患.
举个例子.
对于同样的内容 可以有下面的3种形式
html形式 
Html代码 复制代码
   1. 《script type=“text/javascript“》  
   2.  var user = {  
   3.    name : “Tom“,  
   4.    age : 12  
   5. };  
   6. 《/script》 
对于 html 形式,客户端得到数据后,往往是对其做dom操作.
javascript形式 
Javascript代码 复制代码
   1. var user = {  
   2.   name : “Tom“,  
   3.   age : 12  
   4. ; 
对于 javascript形式,往往是对其做eval操作: 
eval(responseText);
json形式
   1. {  
   2.   name : “Tom“,  
   3.   age : 12 
 
对于 json形式,往往是对其做  eval操作之后 赋值给某变量: 
var clientVar= eval(responseText);
客户端拿到不同形式的代码 所要做的工作是不一样的. 
如果没有设置 contentType 客户端很难判断 返回的数据是什么, 该怎么处理.
==========================
另外,对于返回信息,如果不设置contentType,web服务器往往会给返回的内容添加一个“默认的contentType“, 
但是这个“默认“会根据服务器的不同 以及web应用配置的不同而不同.
而浏览器对于没有足够头信息的返回值 也会做出“某些默认行为(打开 或下载 或报错“. 
总之 不同浏览器 不同的浏览器设置 结果可能是不一样的 无法把控.
也就是说 当我们不指定正确的contentType时, 我们所能做的只能是祈祷 在所有环境中, 程序的表现是一致的, 
但是与其“祈祷“不如我们亲自把这些信息加上来得可靠.
所以 正确设置返回信息的 contentType  还是很有必要的.
====================== 
总结 & 建议 : 
1.
服务端 向 客户端 发送 JSON数据 时: 
Content-Type = ’application/json;charset=UTF-8’
2. 
服务端 向 客户端 发送 JS 代码 时: 
Content-Type = ’text/javascript;charset=UTF-8’

服务端 判断 客户端 提交的是否是 JSON数据 时 :
Content-Type = ’application/json;charset=UTF-8’ 
Content-Type = ’text/json;charset=UTF-8’ 
Content-Type = ’text/javascript;charset=UTF-8’ 
Content-Type = ’application/javascript;charset=UTF-8’
只要 Content-Type 满足上面4个条件中的 任意一个时,就可以认为提交的数据是 JSON数据. 
之所以要提供4种选择 是因为 为了提供更好的兼容性. 
(我想没有人会提交真正的js代码到服务端 然后用服务端js引擎去解析执行吧? 
即使真有这种需求 也可以在js代码外包一层 json格式的 wrapper , 
所以姑且都当作json处理应该没什么问题) 

document.createElement设置contenttype为json


在 HTML 文档中,Document.createElement() 方法用于创建一个由标签名称 tagName 指定的 HTML 元素。如果用户代理无法识别 tagName,则会生成一个未知 HTML 元素 HTMLUnknownElementar element = document.createElement(tagName[, options]);
数tagNam定要创建元素类型的字符串,创建元素时的 nodeName 使用 tagName 的值为初始化,该方法不允许使用限定名称(如:“html:a”),在 HTML 文档上调用 createElement() 方法创建元素之前会将tagName 转化成小写,在 Firefox、Opera 和 Chrome 内核中,createElement(null) 等同于 createElement(“null”)options可选一个可选的参数 ElementCreationOptions 是包含一个属性名为 is 的对象,该对象的值是用 customElements.define() 方法定义过的一个自定义元素的标签名。为了向前兼容较老版本的 Custom Elements specification, 有一些浏览器会允许你传一个值为自定义元素的标签名的字符串作为该参数的值。可以参考本页下方的 Web component example Google 的 Extending native HTML elements 文档仔细了解如何使用该参数。回值建的元素(Elemen