我在javascript中通过dwr来调用某个java类的一个方法:如下
function ChkForm()
{
       //验证表单的基本数据是否正确:是否为空什么的,没有数据库操作
       .......如果上面的验证通过了,进行部门存在判断
        return ChkDept();
       这里边不仅仅只有部门判断,还有其他判断
        。       
}
function ChkDept()
{
    //该方法主要是进行判断部门是否存在判断
     deptService.isDeptExists(unitid,deptname,
                             function(data)
                             {
                                 if(data) { //说明部门是存在的:return true;} else {alert('部门不存在 ');return false;}
                             });
}

解决方案 »

  1.   

    ChkForm()在button点击是触发,我点击button时,比如说部门不存在,结果有弹出提示"部门不存在",但是表单还是提交了,我不想让他提交,怎么办
      

  2.   

    把ChkForm()在<form onSubmit="return ChkFrom()">触发试下
      

  3.   

    ajax的是一种异步的机制,你在function(data) {}中return 是没有效果的。
    你在//必须加上后面这句
    dwr.engine.setOrdered(true); //设定为同步
    function ChkDept()
    {
        //该方法主要是进行判断部门是否存在判断
        var isExists = false;
        deptService.isDeptExists(unitid,deptname,
                                function(data)
                                {
                                    if(data) { isExists = true} //修改isExists的值
                                });
        return isExists; //在返回isExists的值
    }
      

  4.   

    ajax本身的HttpXmlRequest是同步的吧,
    不过dwr的回调比较特殊,在servlet里生成js代码然后out到页面执行的,这种回调是异步的.
    所以ChkDept()方法不会等待dwr回调函数的执行结果.
    调起deptService.isDeptExists(xxx)方法之后,就立刻执行后面的代码,
    在ajax发现部门为空alert()并且return false之前,表单就被提交了( - __ - )y一~
      

  5.   


    Ajax是异步,也就是说,我们在发送ajax请求的时候,返回来的执行的结果不一定是按照你发送请求返回的。
    这就是为什么ajax为(Asynchronous JavaScript and XML)异步Javascript和XML的缩写。
      

  6.   

    恩,ajax是异步J&X,请求的发送不会对页面造成影响,能继续响应其他事件.
    我是说本身的HttpXmlRequest是同步的.
    ajax页面和后台交互的HttpXmlRequest所依赖的是http请求,标准的同步通信.
      

  7.   

    理解性错误
    请问ChkDept()的返回值是Boolean吗,否则将不会阻碍表单的提交。所以同意3楼的建议。
    同时<form onSubmit="return ChkFrom()">
      

  8.   

    DWR默认是异步返回的
    也就是回调方式但是可以设置成同步的