我在表单提交时做了一个验证函数,函数中用jquery的$.post方法去查询了数据库,根据返回情况判断是否能够执行表单的action,
但是缺发现js函数执行时没等$.post查询结果赋值给返回变量就已经执行了最后一句,返回默认返回值了。这就使我的验证出现了误判。经过调式我发现这个问题是js函数在执行时没有等$.post的返回结果就执行了下一句,我有些困惑,这中问题该如何解决,虽然不管能不能提交都在判断中都来个alert()倒是可以解决,但是由于互动友好性不太可取。清剿大虾们有什么好的解决方法,这个查询不想放到action里面做,因为我想让他提交表单前就能得到结果,一边重新选择。
代码如下://当前人员=主联系人 本因能返回true执行表单提交,现在却不等post的结果出来就执行了最后一句return了初始值false,导致判断出错。function checkIsMainContact(){
var tof = false;
var isMainContactObj = document.getElementsByName("staffSqlBean.mainContactSign");
var customerId = document.getElementById("customerId").value;
var beanStaffId = document.getElementById("beanStaffId").value;
var isMain =0;
for(var i=0;i<isMainContactObj.length;i++){
if(isMainContactObj[i].checked){
isMain = isMainContactObj[i].value;
}
}
if(isMain ==0){
//设置主联系人=否
tof = true;
}else{
$.post("isMainContact.action",{customerId:customerId},
function(data){
var v = eval(data);
if(v.isMainContactSign == 0){
tof = true;
}else{
//存在主联系人
if(v.isMainContactSign == -1){
alert("该客户的主联系人存在异常,暂无法再设置其他主联系人!");
}else{
if(v.staffId == beanStaffId){
tof = true; //当前人员=主联系人
}else{
alert("客户已存在主联系人的情况下无法再设置其他主联系人!");
}
}
}
}
);
}
return tof;
}
但是缺发现js函数执行时没等$.post查询结果赋值给返回变量就已经执行了最后一句,返回默认返回值了。这就使我的验证出现了误判。经过调式我发现这个问题是js函数在执行时没有等$.post的返回结果就执行了下一句,我有些困惑,这中问题该如何解决,虽然不管能不能提交都在判断中都来个alert()倒是可以解决,但是由于互动友好性不太可取。清剿大虾们有什么好的解决方法,这个查询不想放到action里面做,因为我想让他提交表单前就能得到结果,一边重新选择。
代码如下://当前人员=主联系人 本因能返回true执行表单提交,现在却不等post的结果出来就执行了最后一句return了初始值false,导致判断出错。function checkIsMainContact(){
var tof = false;
var isMainContactObj = document.getElementsByName("staffSqlBean.mainContactSign");
var customerId = document.getElementById("customerId").value;
var beanStaffId = document.getElementById("beanStaffId").value;
var isMain =0;
for(var i=0;i<isMainContactObj.length;i++){
if(isMainContactObj[i].checked){
isMain = isMainContactObj[i].value;
}
}
if(isMain ==0){
//设置主联系人=否
tof = true;
}else{
$.post("isMainContact.action",{customerId:customerId},
function(data){
var v = eval(data);
if(v.isMainContactSign == 0){
tof = true;
}else{
//存在主联系人
if(v.isMainContactSign == -1){
alert("该客户的主联系人存在异常,暂无法再设置其他主联系人!");
}else{
if(v.staffId == beanStaffId){
tof = true; //当前人员=主联系人
}else{
alert("客户已存在主联系人的情况下无法再设置其他主联系人!");
}
}
}
}
);
}
return tof;
}
解决方案 »
- JS幻灯片显示问题啊
- showModalDialog中使用 history.go(-1)后退不好使,怎么解决?
- 给js赋值问题
- 求助:怎么用js关闭当前页面时,实现确认和取消功能?
- 这两种方式有什么分别
- 请教:怎样把数据库里的数据放到编辑器里,下面放不进去。编辑器都是用js控制的
- 如何把vbscript中的SESSION变量值传到JAVASCRIPT中?
- 我有一个3帧的首页。想根据浏览器的分辨率自动添加滚动条。兄弟们帮忙
- 要在form中实现两个action,应该怎样写?
- 在jquery 1.11.1版本中,如何实现jquery 1.9以下版本里面的toggle功能?
- JQuery中的Click点击问题!
- 画曲线图问题
false是同步,true是异步,或者用ajax手写源码也可以设置
function checkIsMainContact(){
var isMainContactObj = document.getElementsByName("staffSqlBean.mainContactSign");
var customerId = document.getElementById("customerId").value;
var beanStaffId = document.getElementById("beanStaffId").value;
var isMain =0;
for(var i=0;i<isMainContactObj.length;i++){
if(isMainContactObj[i].checked){
isMain = isMainContactObj[i].value;
}
}
if(isMain ==0){
//设置主联系人=否
return true;
}else{
$.post("isMainContact.action",{customerId:customerId},
function(data){
var v = eval(data);
if(v.isMainContactSign == 0){
return true;
}else{
//存在主联系人
if(v.isMainContactSign == -1){
alert("该客户的主联系人存在异常,暂无法再设置其他主联系人!");
return false;
}else{
if(v.staffId == beanStaffId){
return true; //当前人员=主联系人
}else{
alert("客户已存在主联系人的情况下无法再设置其他主联系人!");
return false;
}
}
}
}
);
}
}
3楼的想法跟我一样,但事实上不行的哦,在会进入(//当前人员=主联系人)处的情况下,return的是true; 但结果返回值是false的。同样感谢你的热心解答O(∩_∩)O~
我那段代码应该是可行的,你再看看把!
想想是对的,但结果真的是不对的,我开始的时候也是这样做的,刚才又试了一把还是不对的。我也觉得jquery里不应该有这种问题吧,我以前dwr框架下没遇到这种问题过,同样是异步操作的。这里我没办法了,只好在这个js函数里设置成同步操作了。
太挫了,昨天提的问题今天这网站就有了,好厉害的爬虫。
如果 async: false 失去了ajax的意义 ,那么为什么ajax还要有设置的接口呢?便民养生网 http://www.yangsheng52.com