2012-07-01 32 views
0

我遇到了jquery和serialize方法的問題。帶輸入更新的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功能。爲什麼?

+0

請將您的代碼放在代碼塊中,以使其可讀。 – Grilse

+0

你確定'codeAddress'函數中的代碼是否被執行?你有一些條件表達式可能會阻止它運行。你的'status'變量**真的**等於'google.maps.GeocoderStatus.OK)'嗎? – Lix

回答

0

codeAddress()確實不是立即修改您的輸入字段。相反,它會發出一個AJAX(異步)請求,並在響應進入時更新您的輸入。與此同時,其餘代碼正常進行。

作爲一個時間表:

  1. 呼叫codeAddress()
  2. 問題AJAX請求,谷歌地圖從codeAddress()
  3. 序列化
  4. 返回,並提交形式
  5. 響應來自谷歌回來。
  6. 輸入被修改,爲時已晚,無法在表單提交中使用。

解決方法是在提交表單之前等待geocoder.geocode()完成。

geocoder.geocode({ 'address': address}, function(results, status) { 
    // Modify inputs 
    // Submit form 
}