jQuery ajax回调函数设置ajax体外变量

本文介绍了如何在jQuery中利用Ajax回调函数修改外部作用域的变量,通过设置Ajax的同步属性async:false来实现流程同步,确保回调执行后再进行后续操作。

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

如题,如果我们想通过ajax的回调函数设置 ajax方法体外的参数,

如下例:
jQuery.validator.addMethod("emailAlreadyUsed", function(value, element){
 value = jQuery.trim(value);
 var ajaxResult = false;
 jQuery.ajax({
               
url:"yourUrl?t="+new Date().getTime()+"&email=" + value, 
                  dataType:"jsonp",
                  jsonp:"jsoncallback",
                  success:function(data)
                  {
                                        var jsondata = data[0];
                                        if(jsondata.op_status == "NG")
                                       {
                                              ajaxResult = false;
                                        } else {
                                              ajaxResult = true;
                                        }
                  }
 });
 return ajaxResult;
}, jQuery.validator.messages.emailAlreadyUsed);
我们想通过ajax的回调函数设置ajax方法体外边的ajaxResult变量,往往不能如愿以偿。
因为此时的ajax调用并没有和体外的流程同步,因为ajax缺省是异步调用的,也就是说,体外的方法在ajax回调之前已经return了,所以ajaxResult并没有被回调函数赋值。

所以,

我们可以在ajax方法体内加上async:false,使得ajax和体外方法保持同步,也就是说ajax体外的方法需要等待ajax回调函数执行后再继续执行,代码如下
jQuery.validator.addMethod("emailAlreadyUsed", function(value, element){
 value = jQuery.trim(value);
 var ajaxResult = false;
 jQuery.ajax({ 
                 
url:"yourUrl?t="+new Date().getTime()+"&email=" + value, 
                  async:false,
                  dataType:"jsonp",
                  jsonp:"jsoncallback",
                  success:function(data)
                  {
                                        var jsondata = data[0];
                                        if(jsondata.op_status == "NG")
                                       {
                                              ajaxResult = false;
                                        } else {
                                              ajaxResult = true;
                                        }
                  }
 });
 return ajaxResult;
}, jQuery.validator.messages.emailAlreadyUsed);
这样,我们就能得到期望的结果了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值