这两天在做一个easyui datagrid 与服务器端数据交互时遇到了一个问题,

利用ajax上传json格式的数据,对于更改操作使用put方法,对于添加操作使用post方法,js代码如下:

			onAfterEdit : function(rowIndex, rowData, changes) {
				obj.editRow = undefined;
				var type = "POST";
				var url = "/umgr/user";
				$("#save,#redo").hide();
				var deny = true;
				//下面可以处理要保存的数据,通过ajax与后台交互
				if(rowData.deny == 'false') {
					deny = false;
				data = '{'+
						"username:'"+rowData.username+"',"+
						"password:'"+rowData.password+"',"+
						"deny:"+deny+","+
						"metadata:{}}";
				//data = "{'username':'1234','password':'123','deny':false,'metadata':{}}";
				if(!obj.addAction) {//更改操作
					type = "PUT";
					url = url+"/"+rowData.username;
				else {
					obj.addAction = false;
				$.ajax({
			        type: type,
			        url: url,
			        data: data,//此处data为上传的数据
			        dataType: "json",
			        cache:false,
			        success: function (msg) {
			        	console.log(data);
			            if(msg.status==0) {
			            	 $('#dg').datagrid('load');//删除后刷新
			            	  $('#dg').datagrid('unselectAll');//删除后原来选定的行仍处于选定状态
			            	  $.messager.show({//右下角显示删除结果提示
			            		  title:'提示',
			            		  msg:'数据操作成功',
			            else if(msg.status==1) {
			            	  $.messager.show({//右下角显示删除结果提示
			            		  title:'提示',
			            		  msg:'数据操作失败',

测试时当提交put请求时,没有任何问题,后台接收到的json数据正常,奇怪的事情发生在提交post请求,比如我在前端拼了一段json数据:  {username:'test',password:'test',deny:true,metadata:{}}  当用post请求时,后台接收到的内容为: %7Busername%3A%27test%27%2Cpassword%3A%27test%27%2Cdeny%3Atrue%2Cmetadata%3A%7B%7D%7D=

仔细观察可发现冒号、单引号和大括号都被转码,后来在ajax中加入一段代码:

contentType: "application/json",

此时在进行测试,post发送请求,后台接收到的json格式正常了。

问题貌似解决了,但是为何put请求在没有设置contentType时能正常传输数据,post则不能呢?

有时间得研究下put和post的差异

-----------------------------------------无耻的分隔符-----------------------------------

简单来说put与post的差异就是:post是非幂等操作,put是幂等操作

这两天在做一个easyui datagrid 与服务器端数据交互时遇到了一个问题,利用ajax上传json格式的数据,对于更改操作使用put方法,对于添加操作使用post方法,js代码如下: onAfterEdit : function(rowIndex, rowData, changes) { obj.editRow = undefined; var type = "
一、基本概念 HTTP 状态码是客户端向服务端发起请求后,服务端返回的状态码及状态信息,状态码一般由三位数字组成,状态码的首字母一共有5种,分别是1-5,代表着5种不同的类型信息。以下是类型信息与具体的状态码信息。 二、状态码类别 1xx:通知信息,http服务器接收到请求,等待客户端的进一步消息发送。 100(“Continue”):继续发送请求(服务端已经接收到一部分,继续发送剩下的请求)。 101(“Switching Protocols”):切换不同的协议,可切换到高版本的协议或者其他协议。在使用
在项目开发中,发送ajax请求,给后台传的参数中包含&、#等特殊字符,接口请求失败。解决方法如下: 一、使用encodeURIComponent转码 encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。 该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。 其他字符(比如 :;/?????&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
在用okgo做网络请求的时候直接添加请求体,用key+value的形式 参数里面包含 123456@qq.com 会被转义成-> 123456%40qq.com 原因是:请求头默认的Content-Type: application/x-www-form-urlencoded 会对其进行转义,只要用 Content-Type: application/json; charset=utf-...
如题。博主在使用jquery的ajax的时候碰到这样的问题: 后台传输过来的特殊字符(",&,<,>)在使用通过$.ajax方法得到的是其html转义字符(&quot;,&amp;,&lt;,&gt;)。 所以如果展示该字符的时候会出现问题。(使用$(selector).val(), $(selector).text()方法的时候都会展示为其...
复制代码 代码如下:var post_Str = apply_name.replace(/\+/g, “+”);//”+”转义   var post_Str= post_Str.replace(/\&/g, “&″);//”&” var post_Str= post_Str.replace(/\#/g, “#″);//
在 golang 中,将字符串转换为 json 格式时,会自动将一些特殊字符添加反斜杠进行转义,如双引号、反斜杠、换行符等。这样做是为了避免这些特殊字符json 格式的解析产生干扰。 但有些时候,我们需要将这些转义字符去掉,得到原始的字符串内容。这时可以使用 strconv 包中的 Unquote() 函数。 Unquote() 函数会将字符串中表示转义字符的反斜杠去除,并将实际的字符转义为其对应的 ASCII 字符。如果字符串不是以双引号包裹的,则会返回一个错误。 示例代码如下: package main import ( "fmt" "strconv" func main() { jsonStr := `{"name":"golang","version":"1.16"}` fmt.Println(jsonStr) unquotedStr, err := strconv.Unquote(jsonStr) if err != nil { fmt.Println(err) return fmt.Println(unquotedStr) 输出结果如下: {"name":"golang","version":"1.16"} {name:golang,version:1.16} 可以看到,经过 Unquote() 处理后,字符串中的双引号已经去掉了,而转义字符也被正确还原。