window.open()的get更改为post传递参数
最近改了个公司的需求,要求把前端的单选框更改为多选框。改前端简单,但是之前的代码都是用的window.open()跳到控制层(controller),传递参数只能用get,不仅把数据暴露在url中,还会限制参数的数量。所以准备用别的。
我最先打算用Ajax定义一个数组,用json格式传给控制层。。。。Ajax果然好用,数据是传过去了,可控制层的return "xxx.html"却又不能跳转页面了。ajax只是局部刷新,所以不能在后台接口直接进行页面的跳转,只能在ajax的回调函数中进行页面的跳转。 在Ajax的success里加个跳转,可model封装的数据也过不去页面,那还不如window.open()呢。
baidu一下吧,居然可以用隐藏的form表单传递数据,还不会暴露数据,不过前端的东西看着就麻烦,再找找其他方法。。。。stackoverflow一下。靠。一样的方法。
那就用这个吧(没有平台歧视😁)。
代码如下
function openPostWindow(url, data, datas, target_type) {//参数列表,怎么写都行。主要要有url。
var Datas = [];
Datas = datas;
var tempForm = $("<form>");
tempForm.attr("id", "tempForm1");
tempForm.attr("style", "display:none");
tempForm.attr("target", target_type);
tempForm.attr("method", "post");
tempForm.attr("action", url);
var input1 = $("<input>");
input1.attr("type", "hidden");
input1.attr("name", "全局变量");
input1.attr("value", 全局变量);
tempForm.append(input1);
for (var key in Datas) {//传数组就用个循环
var a= $("<input>");
a.attr("type", "hidden");
a.attr("name", "a" + key);
a.attr("value", Datas[key].a);
tempForm.append(a);
var b= $("<input>");
b.attr("type", "hidden");
b.attr("name", "b" + key);
b.attr("value", Datas[key].b);
tempForm.append(b);
..........//用什么写什么
}
var input3 = $("<input>");
input3.attr("type", "hidden");
input3.attr("name", "data");
input3.attr("value", data);
tempForm.append(input3);
tempForm.trigger("submit");
//tempForm.submit(); --trigger("submit")和.submit()都可以
};
openPostWindow("url", data, datas, "_black");
//哪里需要post传参就直接调这个方法就好了,_black新窗口打开,不写用默认的当前窗口打开应该也可以的,反正不需要看到这个表。这里data是数据,datas是数组型数据,也是随便写。
写得不够好,尽可能把自己遇到的问题写出来吧。写了一小段,你们肯定有更优雅的写法,欢迎指出问题。