改善Form提交数据的 UI 交互设计

本文探讨了如何改善Form提交数据的用户界面交互设计,旨在让数据提交过程更加友好。针对Form的数据提交,提出了需要改进的方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

改善Form提交数据的 UI 交互设计

让数据提交更友好

Form的数据提交需要改进的地方

  • 1.数据一次校验

    完整的数据校验需要前台页面(JS)和后台程序分别做校验,虽然有Commons-validate 框架可以使用,但本质上还是分为这么2次校验。 如果校验出错或者程序出错,都是后台采用redirect的方式返回到前台,虽然采用了struts之类框架的都是forward到前台,如果要是做复杂和耗时的校验(比如要进行数据库校验),页面会长时间停留在后台页面,不是很友好和方便。

  • 2.验证信息友好化,让验证码”躲”起来

    为了防止机器提交,都会采用验证码机制,对于正常操作的用户,每次都要输入验证码,显然不够不友好的,如果提交的时候能够做判断,如果是正常提交就不需要验证码,如果是被认定为机器提交,诸如连续提交等行为,则提示需要输入验证码才能提交数据,这样显然就进了一步。

  • 3.提交过程友好显示,拒绝滥用alert界面

    通过为了简单,在返回任何数据的时候,都用alert提示给用户,alert最大的问题在于需要点击一下才能关闭,如果提交成功能自动关闭是不是比这种alert要好很多?

    采用AJAX +JSON 方式提交数据 与传统提交数据 的比较

    /* 表单提交 2.0 update 2008-06-14  */
    
    var ajaxSubmitFormData = {
    
     form:false,  //用来保存正在提交的表单
    
     debug:false,
    
     callback:false,
    
     dataType:"json",
    
     onSubmit:function(data){
    
       //正在提交数据提示
    
     },
    
     onResponse:function(response){
    
    	 //当数据返回时触
    
     },
    
     onResponse200:function(data){
    
     	 alert('恭喜你,数据提交成功');
    
     	 window.location.reload(false);
    
     },
    
     onResponse403:function(data){
    
     	  //输入验证码界面
    
     	 var formId=ajaxSubmitFormData.form;
    
     	 if (!$(formId).find(":input[name='verfiyCode']").length){
    
     	  $(formId).append('<input type="text" name="verfiyCode" size="4" /><img src="verifyCode.jsp">');
    
     	 }
    
     },
    
     onResponse500:function(data){ 	    
    
     	  var s="提交错误:/n";
    
     	  //alert(data.length);
    
     	  for(var i=0;i<data.length;i++){
    
     	  	s=s+data[i].id+"|"+data[i].message+"/n";
    
     	  }
    
     	  alert(s);
    
     },
    
     onResponse302:function(data){
    
     	 if (data.length>0){
    
      	 window.location=data[0].message;
    
       }else{
    
       		alert("未定义跳转地址");
    
       }
    
     }
    
    };
    
    $(document).ready(function(){
    
    	$('form.ajaxForm').submit(function() {
    
           //alert($(this).attr("id"));
    
           var formId=$(this).attr("id");
    
           submitAjaxFormNow("#"+formId);
    
           return false; // <-- important!
    
        });
    
        $(".ajaxSubmitButton").click(function(){
    
        	 var formId=$(this).attr("formId");
    
        	 //alert($(this).attr("formId"));
    
        	 submitAjaxFormNow("#"+formId);
    
        }); 	
    
    }); 
    
    function initSubmitAjax(formId,returnFunc){
    
      var options= {             
    
      beforeSubmit:  function(formData, jqForm, options) {  
    
      	if (ajaxSubmitFormData.debug){
    
      	 var queryString = $.param(formData);    
    
         alert('正在提交的数据:/n' + queryString); 
    
        }
    
    	if ($.isFunction(ajaxSubmitFormData.onSubmit)) {
    
      		     ajaxSubmitFormData.onSubmit(formData);
    
         }		  
    
        return true; 
    
      },   
    
      success:function (responseText, statusText)  { 
    
        try{ 
    
          if (ajaxSubmitFormData.debug){
    
      	    alert('status: ' + statusText + '/nresponseText:/n' + responseText); 
    
           }
    
    	   if ($.isFunction(ajaxSubmitFormData.onResponse)) {
    
        	  ajaxSubmitFormData.onResponse(responseText);
    
           }
    
           ajaxSubmitFormData.form     =false;
    
           ajaxSubmitFormData.callback =false;  
    
          //-------- TODO 改成触发事件方式
    
           responseText=responseText.replace(//r/n/g,"");
    
           //trim space
    
          responseText=responseText.replace(/^/s*|/s*$/g, "");
    
       
    
        	var response = eval(responseText)[0]; //转换成json格式    	 
    
        	if (response.code == "200" ){    	
    
        		if ($.isFunction(returnFunc)) {
    
        			ajaxSubmitFormData.callback=returnFunc;
    
        			returnFunc(response.messages);
    
        		}else{
    
        			if ($.isFunction(ajaxSubmitFormData.onResponse200)) {
    
      		     ajaxSubmitFormData.onResponse200(response.messages);
    
              }
    
        		}
    
            //$(formId).triggerHandler("ajax_response_200",response.messages); 
    
          }  
    
          if (response.code == "403" ){
    
          	//保存当前
    
            ajaxSubmitFormData.form       = formId;
    
            ajaxSubmitFormData.callback   = returnFunc;
    
            
    
          	if ($.isFunction(ajaxSubmitFormData.onResponse403)) {
    
      		     ajaxSubmitFormData.onResponse403(response.messages);
    
            }
    
          	//$(formId).triggerHandler("ajax_response_403",response.messages); 
    
          }
    
          if (response.code == "302" ){
    
          	if ($.isFunction(ajaxSubmitFormData.onResponse302)) {
    
      		     ajaxSubmitFormData.onResponse302(response.messages);
    
            }
    
          	//$(formId).triggerHandler("ajax_response_302",response.messages);
    
          }
    
          if (response.code == "500" ){ 	 
    
          	if ($.isFunction(ajaxSubmitFormData.onResponse500)) {
    
      		     ajaxSubmitFormData.onResponse500(response.messages);
    
            }      
    
            //$(formId).triggerHandler("ajax_response_500",response.messages); 
    
          }       
    
        }catch(e){
    
        	alert("服务器返回的数据格式无效:/n"+responseText+"/nError:"+e.message);
    
        }
    
      },
    
      clearForm:true,
    
      resetForm:true,
    
      timeout:60000, 
    
      type:"POST"
    
     }; 
    
     $(formId).ajaxError(function(event, request, settings){
    
        alert("处理请求发生错误:/n"+settings.url+"/n请重新刷新页面或稍后再试");
    
    	  $.unblockUI(); 
    
     });
    
     return options;
    
    }
    
    function submitAjaxFormNow(formId,returnFunc){
    
     if ($(formId))
    
     	 $(formId).ajaxSubmit(initSubmitAjax(formId,returnFunc)); 
    
    }
    
    function submitAjaxForm(formId,returnFunc){ 
    
     if ($(formId))
    
     	 $(formId).ajaxSubmit(initSubmitAjax(formId,returnFunc)); 
    
    }

    预览

  •  演示和源码下载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值