新手实验jQuery+JSON实现Ajax时遇到的问题,求诸位前辈指点迷津!网页代码:<body>
<div id="demo">
wow! jQuery.<br/>
</div>
用户名:<input type="text" id="userName"/><br/>
密码:<input type="password" id="passWord"/><br/>
<input type="button" value="ajax" id="btn"/>
</body>
javascript代码:$(document).ready(function(){
$("#btn").bind("click",function(){
var params={"user.userName":$("#userName").val(),"user.passWord":$("#passWord").val()};
$.ajax({
url:"../action/ajax",
data:params,
type:"post",
dataType:"json",
success:function(data){
//alert(data.toJSONString());
if(data.user!=null){
alert("登录成功!");
}else{
alert("登录失败!");
}
}
})
})
});
struts.xml配置:    <package name="ajax" namespace="/action" extends="json-default">
     <action name="ajax" class="com.action.AjaxAction">
     <result name="ajax" type="json">
     <param name="includeProperties">
     user.*
     </param>
     </result>
     </action>
    </package>
Action内容:public class AjaxAction extends ActionSupport { private User user;  //User对象就俩属性:userName和passWord,都是String类型
private String toJSONString;  //请注意这个属性,我的问题就是关于它的

public String execute(){ System.out.println(this.toJSONString);  //请注意这一句,呆会我会粘出他的显示结果 if(!user.getUserName().equals("admin") || !user.getPassWord().equals("admin")){
user=null;
}
return "ajax";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getToJSONString() {
return toJSONString;
}
public void setToJSONString(String toJSONString) {
this.toJSONString = toJSONString;
}
}
现在开始说问题,我要实现的功能就是在页面输入用户名密码,按按钮之后,通过jQuery得到用户名、密码,然后通过Ajax发送到Action里,判断用户名、密码是否正确,然后返回User对象。这个功能我确实已经实现了。但是有个小问题,请注意我Action里的那个toJSONString属性,一开始我代码里没有他,但是如果没有他的话,执行程序的时候,虽然也能实现我的功能,但是后台总抛异常,提示我说没有这个toJSONString的set方法。不得已我只能创建一个toJSONString属性,并写出他的get、set方法。出于好奇,我在控制台打印了一下这个toJSONString属性的内容,打印结果如下:
{"onbeforeunload":null,"status":"","onmessage":null,"onblur":null,"onunload":null,"screenTop":114,"name":"","offscreenBuffering":"auto","onhashchange":null,"closed":false,"onload":null,"screenLeft":-2,"onscroll":null,"onafterprint":null,"maxConnectionsPerServer":10,"onresize":null,"length":0,"frameElement":null,"onerror":null,"onhelp":null,"onbeforeprint":null,"onfocus":null,"defaultStatus":""}
我并没有传过这个值啊,这个值是从哪蹦出来的?请各位前辈指教!StrutsjQueryAjax Json

解决方案 »

  1.   

    你使用json传数据 当然需要有json格式的字符串啦
    把你的User类重写toString方法 参考如下:   
     public String toString() {  
             //{'id':1,'name':'zhangsan','password':'123','age':1}  
            return "{'name':'"+name+"','password':'"+password+"'}";  
        }  你参考着看一下我原来写的这个json分页
    http://blog.csdn.net/qiyuexuelang/article/details/8848747
      

  2.   

    http://blog.csdn.net/qiyuexuelang/article/details/8848624
      

  3.   

    补充一下后台抛的异常
    在Action里不加toJSONString属性及其set、get方法的话,就会抛出如下异常,但不会影响到我本来的功能实现Unexpected Exception caught setting 'toJSONString' on 'class com.action.AjaxAction: Error setting expression 'toJSONString' with value ['{"onbeforeunload":null,"status":"","onmessage":null,"onblur":null,"onunload":null,"screenTop":114,"name":"","offscreenBuffering":"auto","onhashchange":null,"closed":false,"onload":null,"screenLeft":-2,"onscroll":null,"onafterprint":null,"maxConnectionsPerServer":10,"onresize":null,"length":0,"frameElement":null,"onerror":null,"onhelp":null,"onbeforeprint":null,"onfocus":null,"defaultStatus":""}', ]
    Error setting expression 'toJSONString' with value ['{"onbeforeunload":null,"status":"","onmessage":null,"onblur":null,"onunload":null,"screenTop":114,"name":"","offscreenBuffering":"auto","onhashchange":null,"closed":false,"onload":null,"screenLeft":-2,"onscroll":null,"onafterprint":null,"maxConnectionsPerServer":10,"onresize":null,"length":0,"frameElement":null,"onerror":null,"onhelp":null,"onbeforeprint":null,"onfocus":null,"defaultStatus":""}', ] - [unknown location]
    at com.opensymphony.xwork2.ognl.OgnlValueStack.handleRuntimeException(OgnlValueStack.java:197)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:174)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:148)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:318)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:231)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: No object in the CompoundRoot has a publicly accessible property named 'toJSONString' (no setter could be found). - [unknown location]
    at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java:106)
    at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2332)
    at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
    at ognl.SimpleNode.setValue(SimpleNode.java:301)
    at ognl.Ognl.setValue(Ognl.java:737)
    at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:234)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:183)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:170)
    ... 49 more
      

  4.   

    谢谢前辈回复,不过你说的这个跟我这个不太一样。我这对于user的这些传递都没问题,只不过运行的时候Ajax自己又给Action传了一堆莫名其妙的JSON,我要问的是这些JSON是哪里来的
      

  5.   

    type="json"   struts封装的json有toJSONString这个属性,所以会这样,改为别的名字就没事了。
      

  6.   


    $(document).ready(function(){
    $("#btn").bind("click",function(){
    //var params={"user.userName":$("#userName").val(),"user.passWord":$("#passWord").val()};
    var params="user.userName="+$("#userName").val()+"&user.passWord="+$("#passWord").val();
    $.ajax({
    url:"../action/ajax",
    data:params,
    type:"post",
    dataType:"json",
    success:function(data){
    //alert(data.toJSONString());
    if(data.user!=null){
    alert("登录成功!");
    }else{
    alert("登录失败!");
    }
    }
    })
    })
    });谢谢楼上前辈们的指点!~~5楼说的很接近,给了我灵感,我把javascript代码里的var param这里给改了,原来是封装成了json对象,现在直接就改成了一堆参数这种,就不再报那些错了~~~也感谢1楼前辈,看了你发的网址,对我这新手也有很多帮助~~所以也给10分。
    不知道为啥,引用用不了,所以没法直接回复诸位,抱歉则个