爬坑记(5):ajax异步请求里面不能设置全局变量,不能return,jq去空格

本文探讨了在表单提交前利用AJAX进行数据校验的常见问题及解决方案,包括如何处理同步请求、避免错误反馈以及确保数据正确传递。

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

起因:

业务需求:在提交表单校验过程中,先通过ajax异步请求一下,判断提交的记录是否数据库已经拥有,有就不给校验通过,没有就让它添加。很简单一个逻辑。

ajax代码

     $.ajax({ 
                    type : "POST",  //提交方式  
                    url : "mobile/bankcard/confirm.do",//路径  
                    data : {  
                        password: password  
                    },
                    success : function(result) {//返回数据根据结果进行相应的处理
                        result=eval('('+result+')');  //单个数据才需要使用
                        if ( result ) {  
                             console.log(result);
                        } else {  
                            console.log(result);
                        }  
                    },
                    error : function(error){
                    console.log(error);
                   } 
                });

坑点一

想通过返回的结果直接在ajax 的if else里面直接return,或者赋值给全局变量。结果发现不可行。因为在ajax中是无法给js中的全局变量赋值的,因为ajax默认是异步请求(当要赋值时,此时的值没有拿到,所以赋值不成功)

  • 解决方案一:增加同步属性设置async: false, 设置为同步请求
 $.ajax({ 
                    type : "POST",  //提交方式  
                    url : "mobile/bankcard/confirm.do",//路径  
                    data : {  
                        password: password  
                    },
                    async: false,
                    success : function(result) {//返回数据根据结果进行相应的处理
                        result=eval('('+result+')');  //单个数据才需要使用
                        if ( result ) {  
                             console.log(result);
                        } else {  
                            console.log(result);
                        }  
                    },
                    error : function(error){
                    console.log(error);
                   } 
                });

解决方案二:使用隐藏的input标签来记录值。
目测如果ajax后接下来的操作马上要获取这个值也是不行的,毕竟ajax执行也要时间,可以用在ajax无关的业务处理里面。

function test(){
  var result=0;
  $.ajax({  
type: "POST",  
url: "ajax/checkfor1.php?action=reg_checkEmail",          
data: {email:email},   
dataType: 'text',     
success: function(data){                                                      
              $('#datastore').append('<div data='+data+'></div>');//使用一个div标签,定义一个自定义属性data来存储数据
},  
error: function() {     
               alert("异常!");    
      }    
});
}

坑点二

好不容易解决前面的同步问题,突然发现这里ajax一直抛错。
后来断定:后台程序必定有bug,我这次是发现后台抛异常了,没有返回值就ajax报错了。

ajax几个常见的错误情况:

  1. data不能不写
    data为空也一定要传”{}”;不然返回的是xml格式的。并提示parsererror. data:”{}”
  2. URL路径问题
    路径不能有中文
  3. dataType错误
    类型错误:后台返回的dataType类型和前台写的不一致会跳入error
    格式错误:jquery1.4之后对json的格式要求非常严格,json格式错误也会跳入error.{“test”:1} 注意格式
    有时,在不需要返回值的情况下,扔按模板格式,设置了dataType:”json”,参数;这时候,ajax传值正确时,出现200返回成功状态下报错的特殊情况。

使用jquery的方法去掉字符串前后空格

虽然在服务器端加trim()方法也可以去掉前后空格,但是前端能做的事情没必要增加服务器压力。
$.trim(xxx);,不解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值