Skip to content

项目需求:

选课界面,选择多个课程添加到购物车计算总价。添加到购物车的课程,点击“提交结算”跳转到订单确认列表,当前界面要呈现上个界面选择的课程,包括:课程名称,课程价格,课程班级等等。

解决方式:

使用 get 方式传参,该方法行不通。因为浏览器 url 承载内容较多况且也有限制大小。所以使用 post 方式提交数据,在下个界面接受上个界面传来的数据列表。

使用 post 提交,不能使用 jQuery 自带封装好的 post 方式提交数据。既然这样,得自己封装一个 post 提交数据。

步骤:

  • 使用 extend 封装一个 post 方法。

  • post 方法传入 url 参数和 args 参数,其中 url 是要跳转到下个界面的路径;args 是传入的数据,比如这里是添加到购物车的课程。

  • 声明 frominput 变量;并且设置 fromurl 地址。

  • 遍历 args 参数,把每一条数据的具体值,绑定到 input 上面并设置 type='hidden' 不可见。

  • 遍历结束,input 追加到 from 上面;from 追加到 body 上面。

  • 设置 from 提交,提交成功后,自动销毁。

完整代码:

$.extend({
		StandardPost:function(url, args) {
			var form = $("<form method='post' style='display:none'></form>"), input;
			form.attr({ "action":url });
			$.each(args,function(key2,value2) {
				$.each(value2,function(key,value) {
					input = $("<input type='hidden'>");
					input.attr({ "name":'objectArray['+key2+']['+key+']'});
					input.val(value);
					form.append(input);
				});
			});
			form.appendTo($('body'));
			form.submit();
			form.remove();
		}
	});
$.extend({
		StandardPost:function(url, args) {
			var form = $("<form method='post' style='display:none'></form>"), input;
			form.attr({ "action":url });
			$.each(args,function(key2,value2) {
				$.each(value2,function(key,value) {
					input = $("<input type='hidden'>");
					input.attr({ "name":'objectArray['+key2+']['+key+']'});
					input.val(value);
					form.append(input);
				});
			});
			form.appendTo($('body'));
			form.submit();
			form.remove();
		}
	});