各位高手,小弟是WEB开发的新手。现在正在做一个项目,使用struts2框架,现在需要实现一个功能:在登陆页面上输入用户名和密码,如果数据库没有此条信息,不刷新页面,弹出一个alert,提醒用户用户名或者密码错误,所以需要采用AJAX。可是我写好代码后,输入用户名,密码,前台压根没反应。前台登陆页面,我使用jquery来实现AJAX,代码如下:
<script type="text/javascript" src="jquery-1.7.2.js"></script>
     <script type="text/javascript">
 $(document).ready(function()
 { 
    $("#sub").click(function()            // 提交按钮的ID是sub
    {   
   $.post(
   "login.action",                           //相关的action
   {
    username:$("#username").val(),         //用户名参数
    pwd:$("#pwd").val()                    //密码参数
    },
    function(data,textStatus)
    {
    alert(data);   //弹出一个alert,提醒用户用户名可能不正确。
    });
    
    });
    })处理login的action里的execute如下:
public class LoginAjaxAction extends ActionSupport implements ServletResponseAware {private String jsonResult;  
private HttpServletResponse response; 
private String username;
private String pwd;//getter和setter方法省略
public String execute()throws Exception
{
 DBConnector dc=new DBConnector()            //     数据库连接类
 AccountDao ad=new AccountDao(dc.getConnection());    
String sql="select*from dbo.sys_account where NAME='"+getUsername()+"'and PASSWORD='"+getPwd()+"'";
AccountBean ab=ad.query(sql);                //根据用户名查表,返回 用户账号类 的对象ab, ab有name和password属性。
if((ab.getName().equals("")||ab.getPassword().equals("")))
{
jsonResult="用户名或者密码不正确";
}response.setCharacterEncoding("UTF-8");
response.getWriter().write(jsonResult);
return SUCCESS;}各位高手能不能帮忙看看到底是哪儿错了?就这个问题,我搞了一天了。非常感谢各位的帮助!

解决方案 »

  1.   

    先在action里面调试,看看有没有进入你的action,如果没即使你访问的url不对或者配置action不对。
    response.getWriter().write(jsonResult);这个写完之后要调用close 方法关闭输出
      

  2.   

    逐步排查,先不使用Ajax,直接input传值,看看struts能不能用,然后再使用Ajax,一点点来。
      

  3.   

    谢谢楼上各位。我在action里打了断点,看到action已被调用,且从数据库里读取了值日。但就是前台没反应。
      

  4.   

    jquery ajax:
    $.ajax({
             url:"",//请求地址
             type:"post/get",   //请求方式
            data:{key:value,....},//参数
         datatype:"json",//可不写
         success:function(resp){
             alert(resp);
         }
    });
    这种方式很明了
      

  5.   

    直接用public void methodname(){
         response.getWriter().write(result);
    }
      

  6.   

    用5楼的方式写ajax,在成功返回函数里调用你的alert()
      

  7.   

    后台的值相等才会给jsonResult赋值,前台是成功才能获得值,判断没问题吗
      

  8.   

    注意return SUCCESS;这个...
    如果你是返回json或者什么的话这里应该是
    return null;
      

  9.   

    json是什么东西?
    你都不知道···········
      

  10.   

    最重要的一步,
    用json对象封装你的数据对象
      

  11.   

    顶,我只用这种方式,其他的看的眼花。
    楼主,你的 response 实例化了吗?,如果没有那响应能到哪里去呢?你前台肯定没反应啊!
    你应该在这里给它赋值:
    public void setServletResponse(HttpServletResponse arg0) {
    this.response = arg0;
    }
      

  12.   

    return SUCCESS;
    改成return null;
      

  13.   


    SUCCESS 不就跳转了么,AJAX 是不刷新的