2012-12-08 21 views
2

我試圖按照這Google Maps API geocode function problem代碼來使用Google Geocode API,但我做錯了什麼。我開始使用地理編碼,然後是jQuery驗證程序,但不知何故狀態沒有設置。任何幫助?Javascript jQuery ajax

jQuery(document).ready(function($) { 

    var shvalidator = $('#post').validate({ 
    rules: { 
     post_title: { required:true } 
    }, 
    messages: { 
     post_title: {required:jQuery.format("Enter the name of the venue")} 
    } 
    }); 

    function getAddress() { 

    var geocoder = new google.maps.Geocoder(); 

    var fulladdress = $('#sh_venue_address1').val()+' ' \ 
     +$('#sh_venue_address2').val()+' ' \ 
     +$('#sh_venue_city').val()+' ' \ 
     +$('#sh_venue_state').val()+' ' \ 
     +$('#sh_venue_postalcode').val(); 

    alert(fulladdress); 
    var a,b; 

    geocoder.geocode({ 'address': fulladdress}, 
    function(results, status) { 
    //**// 
    if (status == google.maps.GeocoderStatus.OK) { 
     a = results[0].geometry.location.lat(); 
     b = results[0].geometry.location.lng(); 
     setAddress(a,b); 
     } 
    }); 
    } 

    // this is the callback method that waits for response from google 
    function setAddress(lat,lng) { 
    $('#sh_venue_latitude').val(lat); 
    $('#sh_venue_longitude').val(lng); 
    alert ($('#sh_venue_latitude').val()); 
    } 

    // this is used to validate the form before submitting 
    $('#post').submit(function() { 
    getAddress(); 
    if (shvalidator.valid()==true){ 
     return true; 
    } else { 
     $('#ajax-loading').hide(); 
     $('#publish').removeClass('button-primary-disabled'); 
     return false; 
    } 
    }); 
}); 
+0

做的console.log(參數),您能得到什麼? –

+0

我得到undefined狀態 – wpuserpj

+0

代碼運行良好,直到// ** //但它然後跳過變量a和b的設置,因爲狀態未定義 – wpuserpj

回答

0

我認爲它沒有工作,因爲沒有完全提交的處理之前(因爲它的異步調用的地理編碼地址)執行的功能的getAddress。 我會想做某事這樣的提交功能:

getAddress(function(){ 
if (shvalidator.valid()==true){ 
     return true; 
    } else { 
     $('#ajax-loading').hide(); 
     $('#publish').removeClass('button-primary-disabled'); 
     return false; 
    } 
}); 

,改變功能的getAddress到:

function getAddress(callback){ 
... 
setAddress(a,b); 
callback(); 

... 
}