html中最常见的post提交方式就是用form 表单提交,只需要定义一个form:指定好请求的url方法,加上几个要post的值,再添加一个submit按钮,点一下就自动提交。
如果直接在页面中调用post请求,会导致页面跳转,给用户不好的体验,比如:提交评论会重新刷新页面,从用户角度考虑提交个评论还要重刷一下不是有病么,这种情形肯定是要用Ajax异步方式提交并刷新的。为了更好的交互效果,我在所有需要提交请求的地方都尽可能用js作了控制。记录了下面这些情形:
1.已经存在form的情况,比如存在id为addWorkForm的表单:
<form name="addWorkForm" id="addWorkForm" action="addWork.action" method="post" enctype="multipart/form-data">
直接用js调用submit即可:
document.getElementById("addWorkForm").submit();
调用后当然了该跳转还是会跳转的。
2.没有form的情况,可以用js建立一个form,下面是一个js建立form并post的通用方法
/**
* @author yu
* @param 'pages/xxx.action', {param1:value1,param2:'value2',param3:'value3'}
* 手动调用的post函数
*/
function post(url, params) {
var temp = document.createElement("form");
temp.action = url;
temp.method = "post";
temp.style.display = "none";
for ( var x in params) {
var opt = document.createElement("textarea");
opt.name = x;
opt.value = params[x];
temp.appendChild(opt);
}
document.body.appendChild(temp);
temp.submit();
return temp;
}
传个请求方法url,传参数进去就可以直接调用了,非异步请求。如果在js中需要post并跳转,又没有定义form表单,可以用这种方法。
3.需要用到异步请求,那只好用ajax了,用法w3c上很详细了。
语法
jQuery.post(url,data,success(data, textStatus, jqXHR),dataType)
参数 | 描述 |
---|---|
url | 必需。规定把请求发送到哪个 URL。 |
data | 可选。映射或字符串值。规定连同请求发送到服务器的数据。 |
success(data, textStatus, jqXHR) | 可选。请求成功时执行的回调函数。 |
dataType |
可选。规定预期的服务器响应的数据类型。 默认执行智能判断(xml、json、script 或 html)。 |
这里是个点击登录的例子:
$.post("login.action", {
username : $("#form-username").val(),
password : $("#form-password").val(),
},
function(response){
if(response.isLogin){
post("listBlog.html",{});
}else{
var bUserValid = response.isUserNameValid;
if(!bUserValid){
$("#tipLabel").text("该用户名不存在");
$("#form-username").addClass('input-error');
$("#form-password").addClass('input-error');
}else{
$("#tipLabel").text("密码不正确");
$("#form-password").addClass('input-error');
}
}
}, "json");
既然需要用到异步请求,那么重点一般是对返回值做些处理,比如评论点击之后,不是重刷页面,而是在返回函数中更新相应div就行了。
说到ajax.post,我遇到一个很奇怪的问题跟这个有关:
$.post 提交请求 后端无法获取session应有的值,疑似 $.post发送请求开辟了新的session

![]()
![]()
该问题在linux下才遇到,在windows环境下却没有这个问题,奇怪指数 5星
查看了下http request header 发现cookies中有两个session id:
后台服务器取的第一个session不是我想要的session,自然不能取到值。那么为何出现如此情况呢,还没找到原因- -。请知道真相的大大务必教我