0

jquery と serialize メソッドに問題があります。

メソッドを介して送信するフォームがあります$.ajax。この方法では、 を使用しますserialize();。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. Google からの応答が返ってきます。
  6. 入力が変更され、フォーム送信で使用するには遅すぎます。

geocoder.geocode()解決策は、フォームを送信する前に完了するのを待つことです。

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