如题,如果我们想通过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);
这样,我们就能得到期望的结果了。