2012-06-24 24 views
1

我向Action类发送了一个Ajax请求,并尝试从Result获得响应。
这里是我的jQuery代码:Struts2:jQuery中没有收到Ajax响应结果

$('#button').click(function(){      
      $.get('ajax.action','query="hi server:)")',function(x,r,s){      
      alert("server said :"+r+"-stat-"+s.status);      
      }) 

这里总是响应为“成功”,这不是预期的响应。
这是我的Action类的execute()。

String response; 
String query; 
    @Override 
    public String execute() throws Exception { 

     response=query+" - Struts added :";   

     setResponse(response); 

     return SUCCESS; 
    } 

有一个getters和setter用于字符串响应和查询已写入(此处未显示)。
这里是我Result

public class AjaxResponse implements Result { 

@Override 
public void execute(ActionInvocation ai) throws Exception { 

    System.out.println("I am the Ajax Rsponse RESULT");// this is displayed in the console 
    PrintWriter out = 
       ServletActionContext.getResponse().getWriter(); 
    try { 
     ServletActionContext.getResponse().setContentType("text/plain"); 

     ValueStack valueStack = ai.getStack(); 
     // Object resObj= valueStack.findValue("response"); 
     out.print("hi I am server ..."); 

     System.out.println("Response WROTE---"); 
    } catch (Exception e) { 
     e.printStackTrace(); 

    }finally{ 

    out.close(); 
     System.out.println("Response Close "); // this is displayed in the console 
    }   
} 

}

这是我如何加入我的结果类的struts.xml

<result-types>   
     <result-type name="ajaxResponse" class="com.app.ajax.AjaxResponse" /> 
</result-types> 

这里是我宣布的行动

<action name="ajax" class="com.app.action.AjaxSupport"> 
     <result type="ajaxResponse"/> 
    </action> 

警报总是只给出SUCCESS,不是预期的结果'你好,我是服务器...'。
控制台显示结果类的打印 - (“我是Ajax响应RESULT”,“响应WROTE ---”,“响应关闭”)我用一个单独的结果类松散的情侣任务,并做业务逻辑里面行动课。
请让我知道我的问题在哪里?

+0

海事组织最大的问题是你正在复制已经为你完成的工作。也不知道为什么你直接设置'response'然后使用setter将它设置为它自己。 –

+1

去与JSON和Jquery ..最好和优雅的解决方案 –

+0

@Dave牛顿。谢谢。不要声明'回复'和'查询'的类型是我的错。两者都是'String'类型。 '回应'是指作为回应发送的简单文本。任何方式我都不清楚“你在复制已经为你完成的工作”。你能解释更多吗?那么我的班级应该如何呢? –

回答

1

问题不在Struts中,但是我检查结果是否正确或错误。

$.get('ajax.action', 'query="hi server")', function(x, r, s) {      
    alert("server said: " + r + "-stat-" + s.status);    

根据此警报,输出为:

server said: success-stat-200 

问题见状成功。与回调函数的参数混淆。

这里'r'是响应状态(我认为是响应),s是xmlHttpRequest对象。

我必须检查不是r,而是x这是实际的预期值。打印x的值,服务器发送内容的实际价值。

+0

+1。考虑命名你的参数更容易理解,而不必查看它! :) –