修正 - 见下文:)
我正在使用jQuery validate插件,由于某种原因我不能让它返回有效字段 - 总是返回无效。
http://plugins.jquery.com/project/jqueryvalidate
这就是我所拥有的
$(function(){
$("#address").validate({
valid: function(val){
$.getJSON("http://maps.google.com/maps/geo?q="+ escape(val) +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?",
function(data, textStatus)
{
if(data.Status.code=='200')
{
return true;
}else{
return false;
}
});
},
errorMessage: function(val){
return "must geo code";
},
appendCompletionIcon: true
});
});
我可以看到GEO代码请求返回发现或找不到任何特定地址,但验证仍然失败 - 如果我按如下方式修改函数,我会得到警告是或警告否有效或无效地址,但验证仍然失败。
function(data, textStatus)
{
if(data.Status.code=='200')
{
alert('yes');
return true;
}else{
alert('no');
return false;
}
});
任何帮助将不胜感激
我找到了解决这个问题的方法,它不是非常漂亮,因为需要完成两个地理代码调用。对我的目的来说足够好了。
var geocode = false;
function geoadd()
{
$.getJSON("http://maps.google.com/maps/geo?q="+ $("#address").val() +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?",
function(data, textStatus)
{
if(data.Status.code=='200')
{
geocode = true;
}else{
geocode = false;
}
});
}
$(function(){
$("#address").validate({
valid: function(val){
geoadd();
return geocode;
},
errorMessage: function(val){
return "must not be blank";
},
appendCompletionIcon: true
});
});
答案 0 :(得分:1)
无论ajax调用状态如何,您的验证都会失败,因为从valid
处理程序返回的值为null,不是true或false。
ajax的完整处理程序返回true或false值,这与从valid
函数返回true / false值不同。
要解决此问题,您必须进行同步ajax调用(我不推荐它,因为它在等待响应时锁定用户界面)或更改其他支持使用ajax进行验证的验证插件调用