0

我对 jquery 和序列化方法有疑问。

我有一个表格,我通过$.ajax方法发送。在这种方法中,我使用serialize();. 在我调用序列化之前,我使用了一个修改 2 个输入文本值的函数,但是在序列化 2 个输入时会发送旧值。

这是我的代码。

$('#formANAGRAFICA3').submit(function() { 
    codeAddress();
    var $form = $('#formANAGRAFICA3'); 
    $.ajax({
        type: 'post',
        data : $form.serialize(),
        url: $form.attr( 'action' ),
        success: function(data, textStatus, jqXHR) {
            $('#editANAGRAFICA3').show();
        }
    });
    return false;
});

function codeAddress() { 
    var address = 'my value';
    geocoder.geocode( {'address': address}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
            var pos = results[0].geometry.location;
            map.setCenter(pos);
            marker.setPosition(pos);
            document.getElementById("aTitle33").value = pos.lat(); 
            document.getElementById("aTitle34").value = pos.lng();
        } else {
            alert("Geocode was not successful for the following reason: " + status);
        }
    });
} 

当它发送表单时,接收到的数据不会更新,即使我使用该codeAddress函数修改了输入文本值。为什么?

4

1 回答 1

0

codeAddress()不会立即修改您输入字段。相反,它会发出一个 AJAX(异步)请求,并在响应到来时更新您的输入。与此同时,您的其余代码将照常进行。

作为时间线:

  1. 称呼codeAddress()
  2. 向 Google 地图发出 AJAX 请求
  3. 从返回codeAddress()
  4. 序列化并提交表单
  5. 谷歌的回应回来了。
  6. 输入被修改,来不及在表单提交中使用。

geocoder.geocode()解决方案是在提交表单之前等待完成。

geocoder.geocode( { 'address': address}, function(results, status) {
    // Modify inputs
    // Submit form
}
于 2012-07-01T15:25:12.067 回答