我有一个在提交时验证的表单,在表单提交函数被调用,提交继续并且不等待函数完成。我该如何解决这个问题?
var clientaddress=false;
function checkaddress(callback){
var geocoder = new google.maps.Geocoder();
geocoder.geocode({'address': address}, function(results, status) {
if (status != google.maps.GeocoderStatus.OK) {
clientaddress=false;
callback(false);
}
else if (status == google.maps.GeocoderStatus.OK) {
clientaddress=true;
callback(false);
}
}
jQuery(document).ready(function(){
jQuery("#submitOrder").submit(function(){
checkaddress(function(result) {
if (!result) {
jAlert("Please enter a valid address!");
jQuery("#address").focus();
isValidation = 0;
}
});
//other validation code that gets executed without waiting for checkaddress()
//submit page
})
我试图创建一个调用地址检查器和验证函数的函数,但它们仍然不会相互等待。
我该如何解决这个问题?
答案 0 :(得分:2)
因为geocode
函数是异步的!使用回调:
function checkaddress(callback){
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status != google.maps.GeocoderStatus.OK) {
callback(false)
} else if (status == google.maps.GeocoderStatus.OK) {
callback(true)
}
});
}
然后使用它:
checkaddress(function(result) {
if (result) {
//result true!
} else {
//result false!
}
//REST OF YOUR CODE GOES HERE, IF PUT OUTSIDE IT WILL EXECUTE WHILE CHECKADDRESS IS IN PROGRESS
});
您的submit
函数也很可能正在运行默认行为,请使用preventDefault
jQuery("#submitOrder").submit(function(e){
e.preventDefault();
//code
});