求指导:Jquery ajax问题
在学习jquery ajax的过程中遇到了些问题,网上找了N久没能解决。
希望各位大大指点一二。
小弟先谢过了。
JSP代码:
$(document).ready(function(){
$("#searchdeptimg").click(function(){
var param = $("#cdepname").val();
$.ajax({
type: "post",
dataType: "json",
url: "${dynamicURL}/riskestimate/createIcreConditionSearch.action",
data: {"searchinfo":"hehe"},
success:
function(data){
alert(data.msg);
},
error:
function(XMLHttpRequest, textStatus, errorThrown){
alert("status:"+XMLHttpRequest.status);
alert("readyState:"+XMLHttpRequest.readyState);
alert("error:"+textStatus);
}
});
});
});
Acrion中java代码:
private String searchinfo;
public String getSearchinfo() {
return searchinfo;
}
public void setSearchinfo(String searchinfo) {
this.searchinfo = searchinfo;
}
HttpServletRequest rquest = this.getRequest();//父类的方法
HttpServletResponse response = this.getResponse();//父类的方法
private PrintWriter out = null;
public String execute() throws Exception {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
out = response.getWriter();
out.flush();
out.write("{"msg":"发送成功"}");
out.flush();
out.close();
return SUCCESS;
}
问题来了:
1.jquery ajax传到action的值 用什么、怎么接收?
2.为什么在JS里写上dataType:"json" 就会一直走error的function呢?打印出的信息分别是status:200、readyState:4、error:parsererror。
3.如果不写dataType: "json"的话,可以返回到success的function。但是data打印出来却是整个JSP页面的html,这是为什么呢?
4.有木有ArrayList转化为json的方法呢?
真心求指导~~~
juery ajax
[解决办法]
用jar 转json 的很多。搜下 ,你的错误
[解决办法]
1.Action中写上对应的get set方法不就可以接收了吗
2.dataType是返回的类型吧,可能你返回的不是json类型才会跳到error中去
3.看下你struts.xml中的配置
4.GSon可以把集合转成json
发下struts.xml吧
[解决办法]
你的action中有对应参数的set方法,就可以获取到对应参数的值了,或者在你的后台方法中【execute方法】,通过request对象来获取【getParameter方法】
你的execute方法不要有返回值了,设置为void就可以了,你返回的"success"路由串在你的struts.xml文件中应该对应了一个页面,所以它不能解析为json对象,当你指定dataType为"json"时,自然就报错转向error对应的方法中去了
[解决办法]
1.jquery ajax传到action的值 用什么、怎么接收?
R: 与form的取法一样,可以使用request.getParameter(“searchinfo”)
2.为什么在JS里写上dataType:"json" 就会一直走error的function呢?打印出的信息分别是status:200、readyState:4、error:parsererror。
R:action 类型设置与前面的不符合 response.setContentType("text/html");
应设置为 response.setContentType("text/javascript;charset=utf-8");
3.如果不写dataType: "json"的话,可以返回到success的function。但是data打印出来却是整个JSP页面的html,这是为什么呢?
R:你的打印参数没设置正确 PrintWriter out = null;
应为 PrintWriter out = response.getWriter();
4.有木有ArrayList转化为json的方法呢?
R:这个很多,gson,json-lib jackson 都可以实现,具体的去baidu下很多资料
供你参考
[解决办法]
我用struts+ajax时是这样用的你可以试下
package com.softeem.jingdong.action;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.softeem.jingdong.entity.Users;
import com.softeem.jingdong.service.UsersService;
import com.softeem.jingdong.util.GetBean;
import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;
public class RegisterAction extends ActionSupport {
private static final long serialVersionUID = 1L;
//获取用户注册信息
private String name;
private String password;
private String code;
public String register(){
try{
UsersService usersService = (UsersService)GetBean.getBean("usersServiceImpl");
Users users = new Users();
users.setName(name);
users.setPassword(password);
usersService.addUsers(users);
}catch(Exception e){
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public InputStream getCheckCode(){
String secode = ActionContext.getContext().getSession().get("validateCode").toString();
System.out.println("--------------" + code + ">>" + secode);
if(secode.equalsIgnoreCase(code)){
return new ByteInputStream("ok".getBytes(), 0);
}else{
return new ByteInputStream("error".getBytes(), 0);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
<!-- 验证验证码 -->
<action name="checkRegisterAction" class="com.softeem.jingdong.action.RegisterAction">
<result type="stream">
<param name="contentType">text</param>
<param name="inputName">checkCode</param>
</result>
</action>