ajax传值给后台

最近公司安排的岗前培训要求写的一个项目是关于电商网站的,做到购物车页面的逻辑时,出现有一些逻辑的错误。因为想到需要提交数据,自然便想到了表单提交。当时就出现了问题。

        第一、页面刷新时,表单提交了一次。(我也不确定是不是提交了。但是我获取的值为null,而且好像并不是偶然。希望有大神帮指点 :到底是不是页面加载时表单默认已经提交了一次。)这倒也不是什么大问题。加一个if判断,不为空才传值就行了。紧接着又出现了问题。第二、页面跳转之后才能获取到值。而从商品详情跳转到购物车之后,这时已经失去了商品的信息。所以无法将商品信息加入购物车的数据库表中。于是又想到了传参。传一个商品的id过去。通过id查找商品信息之后再加入购物车。于是又开始用get传参(错的更离谱了:这样做的方式的后果便是:当用户需要查看自己的购物车时,必须传一个商品id在url中,这是个极大的不方便之处,要是仅仅不方便也就算了。离谱的是:当传入一个参数之后。执行的就是添加购物车的方法,然后又把这个商品加入了购物车中)。

        其实都是逻辑错误,但是代码什么都是正确的。也就是按照代码的逻辑,的却是应该这样做的。本来自己就是个菜鸟。出现这样的问题真的是挺让人奔溃。当时用了3天的时间,一直陷入了这个逻辑的死循环。

        这时候,突然想到了,前人说过,传值首选ajax。说的好像有点道理。当时又觉得 ajax ?好久没用过了,还会不会了。然后又去查资料什么的。原来,ajax的传值类似于一个模板。

        进入正题,给加入购物车这个按钮添加一个id。绑定一个方法:

<div id=btn><a id="buyandadd" class="buyandadd" style="background-color: #FFE48C;" type="button" onclick="sub();">加入购物车</a></div>

然后,就是写写JavaScript语句了。

	<script>
	function sub(){
		var postdata={
				petid:$("#goodsId").val(),
				petname:$("#goodsname").val(),
				petprice:$("#price").val(),
				 count:$("#count").val()
		};
			$.ajax({
				type : "post",
				url : "shopcart/add",
				dataType:"JSON",
				data : JSON.stringify(postdata),
				contentType: "application/json; charset=utf-8",
				success:
				function(){
					 
				 }
				
			});
			alert("加入购物车成功");
		}
		
	</script>

        就是这么简单。定义一个json形式的数组用来装所有你需要传输的数据。type是请求的方式。一般是post,当然也可以get。url为需要跳转的链接地址。dataType。一般都是json啦。data,这里是将json数据做了一个转换为字符串的操作。contentType稍后再说。然后success,就是成功之后回调的函数。

        好了。然后后台就可以取值了。使用一个Map<String, Object>就行了。

        我就是这么用的,不加那个contentType时。喜闻乐见的报错了。原因是request发送的json数据默认的contentType设置为

application/x-www-form-urlencoded;charset=utf-8。这个时候,不能使用spring进行取值。只能采用原始的方式。但是我后台取值用的就是@RequestBody。又不像重新写一个类包装。解决办法就是把这个contentType设置为"application/json; charset=utf-8" 。这样就完美取值了。

        再提一嘴是,如果使用了ajax传值。那么ssm框架默认的controller路径的跳转就失效了。亲身体验。

        余留了几个问题。就是success的回调函数,完全没有反应。但是值确实是传到后台了。如果加了个

error: function(){
            xxxx;
       }

        那么一定会调用error里面的函数。所以对这个success的成功后回调还是没搞清楚。所以希望有看到的大神的话,还麻烦能指点迷津。不胜感激。

        这是我的理解。我也不知道理解的对还是不对。所以,加入有人看到了,又有正确的想法。还麻烦能纠正我一下。

        这就是我用的ajax传值啦。我觉得记录是一个好习惯。加油!!!



阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页