我向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 ---”,“响应关闭”)我用一个单独的结果类松散的情侣任务,并做业务逻辑里面行动课。
请让我知道我的问题在哪里?
海事组织最大的问题是你正在复制已经为你完成的工作。也不知道为什么你直接设置'response'然后使用setter将它设置为它自己。 –
去与JSON和Jquery ..最好和优雅的解决方案 –
@Dave牛顿。谢谢。不要声明'回复'和'查询'的类型是我的错。两者都是'String'类型。 '回应'是指作为回应发送的简单文本。任何方式我都不清楚“你在复制已经为你完成的工作”。你能解释更多吗?那么我的班级应该如何呢? –