我正在使用jquery验证控件远程方法来测试数据库中是否已存在电子邮件地址。第一次验证火灾时一切正常。但是,在后续验证中,传递给Web服务的数据是旧数据,而不是输入文本框的新数据。
e.g。在电子邮件文本框中键入电子邮件地址,验证将触发,结果如预期。电子邮件地址已更改,验证再次触发,但在检查FireBug时,ajax数据是旧数据而不是新数据。
因此,无论文本框中有什么内容,都会传递以下数据。 { '电子邮件': 'test@test.com'}
e.g。这些是规则设置。
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() + "'}"
}
},
答案 0 :(得分: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() + "'}"
};
}
});
答案 1 :(得分: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() + "'}"
};
}
});