1.背景介绍
一个简单的dmeo,后台spring boot,前台html+js。需求:第一个页面点击标签触发onclick事件,js函数中发送请求到后台,后台接收参数查询数据跳转到第二个页面,并将结果带到第二个页面中。
2.遇到的问题
方法一.
第一想法是很简单,js中利用ajax传值,回调函数中跳转到第二个页面并将返回结果拼接在url的?后面,尴尬的是返回的是一个集合,一时间并不知道怎么将集合拼接到url后面带到第二个页面中去 (1.直接拼报错。2.利用encodeURIComponent()不报错,但没继续完成)
,因为前端是thymeleaf模板引擎,也不知道页面怎么接收。并且ajax只可以返回json字符串,并不可以直接在后台跳转页面。准备采取方法二.
方法一的代码:
$.ajax({
type: 'get',
url: 'orders/selectOrdersByUserId',
data: {userId: userId},
success: function (data) {
window.location.href="cart.html?orders="+encodeURIComponent(data.data);
}
})
方法二.
js中利用form表单发请求并且在url后面拼接参数,如下:
var url="orders/selectOrdersByUserId?userId="+userId;
var form=$("<form method=get action='"+url+"' > </from>");
$("body").append(form);
form.submit();
form.remove();
这样后台不论怎么接收userId都是null,崩溃了好久,至少10根头发
3.解决办法
get换成post
,完美解决
4.原因
页面通过表单(form)向服务器提交数据的时候有两种形式,一个是POST,另一个是GET。两种的一个区别是GET会直接把数据附加在url的后面,而POST发送的数据放置在http包中。form的action属性就是提交数据的url地址,method属性可以指定是GET或POST。
需要注意的是如果采用GET方式,那么action url中参数都会被丢弃,提交时候只会把form中的数据拼接在url向服务器提交;但是POST的方式则不会这样,它会按照action指定的url进行提交数据,包含url后面跟着的参数和参数值。
get和post区别请参看: https://blog.youkuaiyun.com/ls975214191/article/details/103371991
参考:
https://www.cnblogs.com/qxbj/p/4310278.html