Post请求相关整理

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,自然不能取到值。那么为何出现如此情况呢,还没找到原因- -。请知道真相的大大务必教我



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值