Struts ajax后台无法获取

1.问题

在使用ajax 的post方法时后台无法获取到name值,一直显示为null

代码如下:

$.ajax({
 			type : "POST",
 			url : "${pageContext.request.contextPath}/xx/xxxxx_xxxxx.action",
 			contentType:"application/json;charset=UTF-8",
 			dataType : "json",
 			data :{"id":id},
 			success : function(data) {
 			    //操作
 			},
  			error:function(xhr,textStatus){
  				 $.messager.alert('温馨提示','网络异常!');
 		    }
	 	});

java后台

private String id;
	
	 public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	
	 public String queryIdentiyInfo(){
		 JSONObject jo = new JSONObject();
			try {
				System.out.println(id);
				String id = getRequest().getParameter("id");
				System.out.println("id值为:"+id);
				//后续操作
			} catch (AKSQLException e) {
				jo.put("status","0");
				jo.put("errorMsg", "系统内部错误");
				e.printStackTrace();
			}
		 setResult(jo);
		 return "success";
	 }

输出结果均为null ,百思不骑姐


2.解决

通过查找资料发现,问题在于ajax中的contentType:"application/json;charset=UTF-8"语句,将其删除后台获取正常。

为什么contentType会影响ajax传值导致后台无法获取?

根据某大佬的回答而后我的理解是

   在ajax使用post时http协议时,jquery会自动设置conent-type为application/x-www-form-urlencoded。而如若手动设置了contentType的值后Http会将传的参数的方式以id=123来传递,而并非键值对的方式(id:123)。后台获取时是以key,value来取相应的name!!!!

如下:

Struts ajax后台无法获取_第1张图片

~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Struts ajax后台无法获取_第2张图片

至此,更改后解决.

$.post,$.get 为什么又可以正常使用呢? 因为简化后的ajax并没有设置contentType的操作。

延伸

$.ajax({
 			type : "GET",
 			url : "${pageContext.request.contextPath}/bis/api/sh/state",
 			dataType : "json",
 			contentType:"application/json;charset=UTF-8",
 			data :{"id":id,"channel":channel,"type":type},
 			success : function(data) {
 				//操作
 			},
  			error:function(xhr,textStatus){
  				layer.close(load);
  				layer.open({
				    content: '网络错误.'
				    ,btn: '确定'
			    });
 		    }
	 	});
GET方法设置 contentType后数据获取正常,POST不行

"GET" 为什么又可以呢?   contentType:"application/json;charset=UTF-8"设置会将参数附加到URL的后面,而GET本身就是以这样的方式进行请求的。如以上代码则必须要设置contentType,在于它需要将data中设置的参数变成GET方式传输(参数附加URL后面). 

参考源:https://bbs.csdn.net/topics/391866864?page=1


你可能感兴趣的:(Struts ajax后台无法获取)