当前位置:编程学习 > JAVA >>

一个关于Jquery异步提交表单数据验证问题,头疼~!!!

<login_form.jsp>
<%@ taglib uri="/struts-tags" prefix="s" %>
//导入js
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.4.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/check.js"></script>
//body部份
<s:form  id="ct100" action="checkAction" namespace="/user">
<s:textfield name="username" id="txtUsername" cssClass="textbox"/>
<s:password name="password" id="txtPassword" cssClass="textbox"/>
<s:submit value="登录" theme = "simple" id="btnSignCheck" cssClass="button_enter" onclick="check();"/>
</s:form>

<check.js>
function check(){
var flag=false;
        $.ajax({
            type : "POST",   //提交方式
            url : '/checkAction',   //提交地址ַ
            data :{'username':$('#txtUsername').val(),'password':$('#txtPassword').val()}, //传递的参数
            dataType : "text",  
//注意这里
            'success' : function(msg) {
            alert(msg);
               
            },'error': function(){
                alert("ajax 2222");
                          }
        });
}
<checkAction.java>
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/plain;charset=utf-8");
try {
boolean userdao = new UserDaoImpl().findUser(username, password);
System.out.println(userdao);
if (userdao == false) {
//注意这里
response.getWriter().write("{result: '你好!(这消息来自服务器)'}");
return "login_form";
}
} catch (Exception e) {
e.printStackTrace();
}
return "main";
}

主要代码上完了,现在完成了的,是跳转功能,我能把jsp中表单上的数据传入action并调用 UserDaoImpl().findUser(username, password)找到用户进行跳转.没实现的是,当用户不正确,也就是数据库没有此用户的时候,我想要在action中输出一些内容,比如"用户不存在"等信息,然后到js中的secess方法中把"用户不存在"显示在表单后面一个</span>中.
但是呢,无论我在表单中输入的用户正确与否,他都是调用了js中的error方法 也就是
'error': function(){
                alert("ajax 2222");
                          }
现在就相当于什么呢,我输入用户错了的话,action还是跳在login_form.jsp上,但是输入的信息却是alert("ajax 2222");
我该怎么解决这个返回问题?secess没成功吗,为什么不调用呢?secess成功是什么意思?
直接给例子不给分哈(因为网上例子很多,大同小异,例子没有写出真正的精髓),解决了我这三个问题给分,谢谢了 --------------------编程问答--------------------
引用
无论我在表单中输入的用户正确与否,他都是调用了js中的error方法 

jQuery里面的error方法的定义是交互失败。
你应该在Action里面加一个端点来跟踪
而且我对你data 参数设置那块有疑问:
引用
data :{'username':$('#txtUsername').val(),'password':$('#txtPassword').val()}, 

我们写法一般都是 : foo=bar1&foo=bar2 --------------------编程问答--------------------    $.ajax({
            type : "POST",   //提交方式
            url : '/checkAction',   //提交地址ַ
                 async:false,


加async:false,
试试 --------------------编程问答--------------------  帮顶 --------------------编程问答--------------------
引用 2 楼 wei2253498 的回复:
$.ajax({
            type : "POST",   //提交方式
            url : '/checkAction',   //提交地址ַ
                 async:false,


加async:false,
试试

async:false,
我这个异步处理啊...改你那个成了同步处理了
但是,加了,还是一样的,无论什么情况都是error --------------------编程问答--------------------
引用 1 楼 baichh20110716 的回复:
引用
无论我在表单中输入的用户正确与否,他都是调用了js中的error方法 
jQuery里面的error方法的定义是交互失败。
你应该在Action里面加一个端点来跟踪
而且我对你data 参数设置那块有疑问:
引用
data :{'username':$('#txtUsername').val(),'password':$('#txtPassword').val()}, 
我们写……

加端点跟踪,忘了...if(状态==1){
System.out.println(111)
}
是这样吗?还 是用junit啊 --------------------编程问答-------------------- 一般我们传值的写法data{'username':$('#txtUsername').val(),'password':$('#txtPassword').val()}, 参数名是不加引号的。还有JS调错比较麻烦,所以如果发现问题你可以用最简单的请求方式来试试
$.post{'/checkAction', 'username':$('#txtUsername').val(),'password':$('#txtPassword').val(),function(msg){
alert(msg);
}};
如果这还有问题那么就是你传值的错了,如果这没有错那你就看看你用$.ajax请求的其他参数设置。 --------------------编程问答-------------------- 参数是正确的,如果

引用 6 楼 zh919919 的回复:
一般我们传值的写法data{'username':$('#txtUsername').val(),'password':$('#txtPassword').val()}, 参数名是不加引号的。还有JS调错比较麻烦,所以如果发现问题你可以用最简单的请求方式来试试
$.post{'/checkAction', 'username':$('#txtUsername').val(),'password'……

data :{'username':$('#txtUsername').val(),'password':$('#txtPassword').val()}, //传递的参数
你的data前不加冒号不报错吗?参数是正确的,因为参数传到checkAction中,能打印出来,还能进行数据库查询,跳转,关键是,参数传到checkAction了,再跳回来,jquery接收不到checkAction中的的东西,secess不成功. --------------------编程问答--------------------
引用 6 楼 zh919919 的回复:
一般我们传值的写法data{'username':$('#txtUsername').val(),'password':$('#txtPassword').val()}, 参数名是不加引号的。还有JS调错比较麻烦,所以如果发现问题你可以用最简单的请求方式来试试
$.post{'/checkAction', 'username':$('#txtUsername').val(),'password'……

好像问题找到了....js中的跳转没用到,因为是用的struts2  在<s:form 中anction>直接跳过去,数据全封装在了里面了,在checkAction中有set get username方法,才得到了参数.相当于,js没起作用 --------------------编程问答-------------------- 用$.post请求是不会报错的,ajax请求我指的是大括号里面的,这个在1.4版本下好像是符合规范的,符合json格式不是?1.4以上的没这样写过,直接 data: "username=value"这样写了。知道你参数能传过去,你这样写不管是正确还是错误都会有个值返回给你,如果不返回那就直接说明在action里面已经错了。 --------------------编程问答-------------------- 不知道怎么写了....$.post{'/checkAction', 'username':$('#txtUsername').val(),'password'…
没法写,错 误,after property id --------------------编程问答-------------------- $.post("test.php", { name: "John", time: "2pm" },
   function(data){
     alert("Data Loaded: " + data);
   });

这是API里面的示例。 --------------------编程问答--------------------
引用 11 楼 zh919919 的回复:
$.post("test.php", { name: "John", time: "2pm" },
   function(data){
     alert("Data Loaded: " + data);
   });

这是API里面的示例。


奇怪了,我用input调用check.js(onclick="check();")返回成功
我在submit里加onclick="check();"  总是错误
--------------------编程问答--------------------
引用 11 楼 zh919919 的回复:
$.post("test.php", { name: "John", time: "2pm" },
   function(data){
     alert("Data Loaded: " + data);
   });

这是API里面的示例。

而且用你的这个我在submit里面调用JS是无任何返回值的,在input里面调用有返回值 --------------------编程问答-------------------- 经过百般修改,终于实现了大体的功能:代码如下: 
------------jsp-------------------
<s:form  id="ct100" namespace="/user"  acttion="mainAction">
<s:textfield name="username" id="txtUsername" cssClass="textbox"/>
<s:password name="password" id="txtPassword" cssClass="textbox"/>
<input type="button" value="登录"  onclick="check();"> 
 //注意,这里我换用一个button按钮代替了submit
</s:form>
------------js------------------
function check(){
$.ajax({
            type : "get",   //提交方式
            url : 'checkAction',   //提交地址     ַ
         data:{'username':$('#txtUsername').val(),'password':$('#txtPassword').val()}, //传递的参数
            success : executeCheck
            ,error: function(){
             alert("操作错误");
             }
});
}
function beforeSubmit(){
var flag = check();
}
function executeCheck(data){
var flag=false;
if(data==0){
 $("#name").html("<p>用户或密码错误</p>");   //当用户名或密码错误时能显示
 var flag = false;
}else{
alert(data);        //能正确的接收参数并alert,
$("#name").html("");   
var flag = true;
}
------------------action----------------------
public String execute() throws IOException {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");

PrintWriter pw=response.getWriter();   
try {
System.out.println(username);
int userdao = new UserDaoImpl().findUser(username, password);
System.out.println("count"+userdao);
pw.print(userdao);
} catch (Exception e) {
e.printStackTrace();
}
return null; //注意 这里的返 回值为null,为什么呢,吗的,我给个页面js就不对
}
现在的问题是,怎么提交?当验正通过了怎么跳转到我想去的页面?
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,