在继续之前执行完成功能

时间:2014-07-23 13:00:50

标签: javascript jquery

我有一个在提交时验证的表单,在表单提交函数被调用,提交继续并且不等待函数完成。我该如何解决这个问题?

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
     })

我试图创建一个调用地址检查器和验证函数的函数,但它们仍然不会相互等待。

我该如何解决这个问题?

1 个答案:

答案 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
});