使用ssh三大框架整合时关于struts2,json,ajax整合内容记录。这里写主要部分代码
action部分:
注意事项,action部分的返回值要有set和get方法,否则会报错。
package com.hcj.action;
import net.sf.json.JSONObject;
import com.hcj.dto.User;
import com.hcj.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
//用户注册
public class IsUsernameExistAction extends ActionSupport {
private UserService userService;
private String username;
//这里为json的返回值,这个返回值记得一定要写他的get和set方法,否则会出现错误
private String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String execute() throws Exception {
boolean flag = userService.isUsernameExist(username);
if(flag){
result = "true";
}else{
result = "false";
}
return SUCCESS;
}
}
struts.xml部分:(这里有两个部分.第二个是我按照网上大部分写的用法,但不知为何,这样返回到前台的结果为String,而不是我想要的Json对象,大家可以试试第二种方法,第一种我用过,亲测可用)
第一种(测试可用):
<package name="json" namespace="" extends="json-default">
<action name="isUsernameExistAction" class="com.hcj.action.IsUsernameExistAction">
<!-- 这里result里的name为对应action里的返回值,这里即IsUsernameExistAction类的返回值 -->
<result type="json" name="success">
<param name="includeProperties">
<!--这里写要传的属性,用逗号隔开-->
result
</param>
</result>
</action>
</package>
返回结果效果图:
第二种(我用这种方法时,返回的是String类型,而非我想要的json类型)
<package name="json" namespace="" extends="json-default">
<action name="isUsernameExistAction" class="com.hcj.action.IsUsernameExistAction">
<result type="json">
<!-- 这里的root为固定写法,result为action部分定义的返回值名称 -->
<param name="root">result</param>
</result>
</action>
</package>
返回效果图:
前台界面(ajax部分):
1.原生js写法:
//发送ajax请求
function ajax(value) {
//先声明一个异步请求对象
var xmlHttpReg = null;
if (window.ActiveXObject) {//如果是IE
xmlHttpReg = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
xmlHttpReg = new XMLHttpRequest(); //实例化一个xmlHttpReg
}
//如果实例化成功,就调用open()方法,就开始准备向服务器发送请求
if (xmlHttpReg != null) {
//url里填写请求地址
var url = "http://localhost:8080/xxx/isUsernameExistAction.action?username="+ value;
xmlHttpReg.open("get", url, true);
xmlHttpReg.send(null);
xmlHttpReg.onreadystatechange = doResult; //设置回调函数
}
//回调函数
//一旦readyState的值改变,将会调用这个函数,readyState=4表示完成相应
//设定函数doResult()
function doResult() {
if (xmlHttpReg.readyState == 4) {//4代表执行完成
console.log("11" + xmlHttpReg.responseText);
if (xmlHttpReg.status == 200) {//200代表执行成功
//将xmlHttpReg.responseText的值赋给ID为resText的元素
//document.getElementById("resText").innerHTML = xmlHttpReg.responseText;
console.log(xmlHttpReg.responseText);
}
}
}
}
2.jquery写法
//发送ajax请求
function ajax(value) {
var url = "http://localhost:8080/Hikvision/isUsernameExistAction!check.action?username="+ value;
$.get(url,function(data){
if(data.result == "yes"){
$("#text").html("该用户名已经存在");
$("#text").css({"color":"red"});
flag = false;
}else{
$("#text").html("该用户名不存在,可以使用");
$("#text").css({"color":"green"});
flag = true;
}
},'json');
}