jQuery ajax回调函数设置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, 
                  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);
这样,我们就能得到期望的结果了。

你可能感兴趣的:(jQuery ajax回调函数设置ajax体外变量)