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!!!!

如下:


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


至此,更改后解决.

$.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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值