Jquery表单提交,异步调用然后提交表单成功

时间:2016-07-21 19:56:42

标签: javascript jquery

我正在尝试在提交表单之前将地址插入到表单中。[/ p>

这是我的代码:

 var success = false;
var getLat = 0;
var getLng = 0;

function getLngLat() {
    var address = $(".save-new-address").val();
    if(!address) return false;
    if(success) return false;

    var geocoder = new google.maps.Geocoder();
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            console.log(results);
            map.setCenter(results[0].geometry.location);
            success = true;
            var newMarker = new google.maps.Marker({
                position: results[0].geometry.location,
                map: map  
            });
            $(".save-new-lat").val(results[0].geometry.location.lat);
            $(".save-new-lng").val(results[0].geometry.location.lng);
        } else {
            alert("Geocode was not successful for the following reason: " + status);
        };                                        
    });
}


$("form#save-new-restaurant").submit(function () {
    getLngLat();
    if(success) { 
        return true;
    } else {
        getLngLat();
        $("form#save-new-restaurant").submit();
        return false;   
    }
});

大部分内容都是从谷歌开发者页面复制而来的。然而,我发现的是表单提交太快,并且在上述功能完成后正在检索详细信息,

我只是想在提交表单时从谷歌获取数据,当我已我想要的数据然后提交表单时。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

试试这个

var success = false;
var getLat = 0;
var getLng = 0;

function getLngLat() {
    var address = $(".save-new-address").val();
    if(!address) return false;
    if(success) return false;

    var geocoder = new google.maps.Geocoder();
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            console.log(results);
            map.setCenter(results[0].geometry.location);
            success = true;
            var newMarker = new google.maps.Marker({
                position: results[0].geometry.location,
                map: map  
            });
            $(".save-new-lat").val(results[0].geometry.location.lat);
            $(".save-new-lng").val(results[0].geometry.location.lng);

            $("form#save-new-restaurant").unbind("submit"); // unbinding event so getLngLat doesn't execute again
            document.getElementById('save-new-restaurant').submit();
            $("form#save-new-restaurant").bind("submit", formSubmitCallBack); // attaching event for further uses if require
        } else {
            alert("Geocode was not successful for the following reason: " + status);
        };                                        
    });
}


$("form#save-new-restaurant").bind("submit", formSubmitCallBack);

function formSubmitCallBack() {
    getLngLat();
    return false;
}

希望这会有所帮助!!

答案 1 :(得分:0)

您可以使用延迟对象。

http://php.net/manual/en/function.curl-setopt.php

curl_setopt($ch, CURLOPT_HEADER, false);

然后在你的其他代码中

$("form#save-new-restaurant").submit(function () {
    var lngLat = getLngLat();
    $.when(lngLat)
        .done(function() {
            return true;
        })
        .fail(function() {
             //handle failure
         });
 }