2010-07-03 74 views
2

我正在使用jQuery驗證控件遠程方法來測試數據庫中是否已存在電子郵件地址。第一次驗證觸發時,一切正常。但是,在後續驗證中,傳遞給Web服務的數據是舊數據,而不是輸入到文本框中的新數據。JQuery驗證插件:遠程方法數據問題

例如電子郵件地址被輸入到電子郵件文本框中,驗證觸發,結果如預期。電子郵件地址被更改,驗證再次觸發,但在檢查FireBug時,ajax數據是舊數據,而不是新數據。

因此無論文本框中有什麼,總是會傳遞以下數據。 {'email':'[email protected]'}

例如這些是規則設置。

rules: { 
     <%=txtGuestEmail.UniqueID%>: { 
      email: true, 
      remote: { 
       type: 'POST', 
       contentType: 'application/json; charset=utf-8', 
       cache: false, 
       async: false, 
       url: 'ajaxCheckout1.asmx/IsEmailAvailable', 
       // Use data filter to strip .d explained here http://encosia.com/2009/06/29/never-worry-about-asp-net-ajaxs-d-again/ 
       dataFilter: function(data) { 
        var msg = eval('(' + data + ')'); 
        // If the response has a ".d" top-level property, return what's below that instead. 
        if (msg.hasOwnProperty('d')) 
         return msg.d; 
        else 
         return msg; 
       }, 
       dataType: 'json', 
       data: "{'email':'" + $('#ctl00_PageContent_txtGuestEmail').val() + "'}" 
      } 
     }, 

回答

4

發生這種情況的原因是因爲電子郵件字段的值在頁面加載時被捕獲並且不再刷新。一種解決方案是將遠程規則分別添加到該字段中:

$('#myform').validate(
{ 
    ... 
}); 

$('#ctl00_PageContent_txtGuestEmail').rules('add', { 
    remote: function() { 
     return { 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      url: 'ajaxCheckout1.asmx/IsEmailAvailable', 
      dataFilter: function(data) { 
       var msg = eval('(' + data + ')'); 
       if (msg.hasOwnProperty('d')) 
        return msg.d; 
       else 
        return msg; 
      }, 
      dataType: 'json', 
      data: "{'email':'" + $('#ctl00_PageContent_txtGuestEmail').val() + "'}" 
     }; 
    } 
}); 
+0

謝謝 - 這解決了這個問題。不知道我會想到這樣做! – Matt 2010-07-03 15:44:17

+0

@Darin Dimitrov:我遇到了同樣的問題,但我想我做錯了什麼。我所有的驗證碼都放在'$(document).ready(function()'中。我從'$('#myform').validate'中刪除了'remote'規則的代碼,並且按照您的建議隔離它。 Firebug我可以看到我的服務不會再被調用了嗎?你的代碼片段是否完整?它就像'.rules'('add''完全被忽略了(我改變了url以匹配我之前使用的url) – citronas 2012-03-17 15:08:40

0

下面是最後一段代碼,稍作清理。

$('input[name=<%=txtGuestEmail.UniqueID%>]').rules('add', { 
    remote: function() { 
     return { 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      url: 'ajaxCheckout1.asmx/IsEmailAvailable', 
      dataFilter: function(data) { 
       var msg = eval('(' + data + ')'); 
       if (msg.hasOwnProperty('d')) 
        return msg.d; 
       else 
        return msg; 
      }, 
      dataType: 'json', 
      data: "{'email':'" + $('input[name=<%=txtGuestEmail.UniqueID%>]').val() + "'}" 
     }; 
    } 
});