4. config配合ajaxpost可以使得一个ajax请求未结束时不再提交请求到服务端
我们可以先把下面这行代码注释掉,再来看一个form的运行方式,这样会更清晰
$.Tipmsg.p = null;// 通过验证的信息取消显示
第一次点击submit的时候,页面上提示“正在提交数据”
之后,服务端把处理信息返回到页面上。
假设服务端返回的信息返回的更慢一点,这时候我们不希望再次点击submit的信息再提交到服务端。
有了config配合ajaxpost的设置之后,当一个ajax请求未结束时,点击submit会提示“正在提交数据”
5. Validform是如何处理4的呢?
这是因为Validform为form表单设置了三种状态,分别是:
normal:未提交,posting:正在提交,posted:已成功提交过。
当点击submit提交数据(必须是ajaxpost请求的状态下)的时候,Validform的form状态改为posting,如果ajax返回success时,Validform的form状态改为posted,如果ajax返回error时,Validform的form状态改为normal。
//表单正在提交时点击提交按钮不做反应; if(curform[0].validform_status==="posting"){return false;} var beforeSubmit=settings.beforeSubmit && settings.beforeSubmit(curform); if(beforeSubmit===false){return false;} // ajax 提交之前设置为posting curform[0].validform_status="posting"; // ajaxPost参数必须是true if(settings.ajaxPost || ajaxPost==="ajaxPost"){ // 提示“数据提交中” Validform.util.showmsg.call(curform,curform.data("tipmsg").p||tipmsg.p,settings.tiptype,{obj:curform,type:1,sweep:settings.tipSweep},"byajax"); if(ajaxsetup.success){ var temp_suc=ajaxsetup.success; ajaxsetup.success=function(data){ settings.callback && settings.callback(data); curform[0].validform_ajax=null; if($.trim(data.status)==="y"){ // 设置为posted curform[0].validform_status="posted"; }else{ curform[0].validform_status="normal"; } temp_suc(data,curform); } } if(ajaxsetup.error){ var temp_err=ajaxsetup.error; ajaxsetup.error=function(data){ settings.callback && settings.callback(data); // 设置normal curform[0].validform_status="normal"; curform[0].validform_ajax=null; temp_err(data,curform); } }