情景描述:
利用Struts2 + jQuery 实现ajax时候,如何获取返回值的信息来正确的提示用户。例如给某个电影打分rating,每个用户只能对一个电影打一次分数,如果打第二次的时候就提示用户"已经打过分了"。
1.js代码:
function ratingMovieClick(userId,num,movieId){
if (userId == 0) {
alert("You have to be logged in to rating !")
return;
}else{
var url = "../RatingMovie.action";
var params = {
userId : userId,
num : num,
movieId : movieId
};
jQuery.post(url, params, callbackFun, 'json');
}
}
function callbackFun(data) {
alert(data);
}
2.配置文件:注意这里的<param name="root">result</param>这句将请求处理返回的结果带回到页面中。
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="Struts2_AJAX" extends="json-default">
<action name="RatingMovie" class="com.action.RatingAction" method="addRatingMovie">
<result type="json">
<param name="root">result</param>
</result>
</action>
</package>
</struts>
3.java代码:这里定义的result就是在配置文件里面定义的,这2个要一致。
public class RatingAction extends AbstractAction{
private double avg_rating ;
private int count;
private String result;
private static String CALL_BACK_1 = "You have ratinged !";
private static String CALL_BACK_2 = "Thanks for rating !";
private IRatingService ratingService;
private IMovieService movieService;
/**
* check the records.
* @param obj1
* @param obj2
* @return
*/
public int checkRelatedTableRecord(long obj1, long obj2){
if(ratingService == null){
count = getRatingService().getRecordRating(obj1, obj2);
}else{
count = ratingService.getRecordRating(obj1, obj2);
}
return count;
}
public String addRatingMovie(){
int record = this.checkRelatedTableRecord(userId, movieId);
if(record > 0){
this.result = CALL_BACK_1;
return "success";
}else{
Related related = new Related();
related.setType(Related.TYPE_RATING_MOVIE);
related.setObj1(userId);
related.setObj2(movieId);
related.setDegree(num);
related.setCreated(new Date());
related.setModified(new Date());
ratingService.addRating(related);
avg_rating = ratingService.getAvgRating(Related.TYPE_RATING_MOVIE, movieId);
Movie movie = movieService.getMovieById(movieId);
movie.setRating(new Float(avg_rating));
movieService.updateMovie(movie);
this.result = CALL_BACK_2;
return "success";
}
}
public void setRatingService(IRatingService ratingService) {
this.ratingService = ratingService;
}
public void setMovieService(IMovieService movieService) {
this.movieService = movieService;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
这样当record > 0时,数据库里面已经有记录的时候,就this.result = CALL_BACK_1;return "success"; 这里的result就会赋值成"You have ratinged !",这样在回调函数中就可以拿到这个字符串了。这里的返回值只能是"success",我试过好几个都会报错!
下面是某个参考某论坛上的信息:http://www.iteye.com/topic/560638
一、准备一个JSP页面用于提交ajax请求,这里我使用了JQuery的$.getJSON(url,params,function callback(data))函数提交ajax请求到指定url,并且携带参数params,最后用一个回调函数callback处理请求返回结果data;
二、一个处理请求的Action类,并在struts.xml文件中做相应配置:写一个action类处理ajax请求数据,并将返回结果封装成一个JSONObject对象返回给请求页面。同时在struts.xml中配置对应action,指明其返回类型为json并使其package的extends为json-default,并将要返回请求页面的数据放在名为root的param中,如<param name="root">result</param>。
三、接受请求返回结果:使用JS的eval方法将返回结果data转换成JSON对象,并处理返回结果。
$.getJSON(url,params,function callback(data){
// convert to json object
var user = eval("("+data+")");//
$("#result").each(function(){
$(this).html('welcome ,' + user.name);
});
});
}
public String login() throws Exception {
Map map = new HashMap();
map.put("name", user.getLogName());
map.put("password",user.getPassword());
JSONObject obj = JSONObject.fromObject(map);
result = obj.toString();
return SUCCESS;
}
分享到:
相关推荐
- **jQuery处理响应**:前端接收到响应后,jQuery自动将JSON数据解析为JavaScript对象,然后可以通过回调函数处理这些数据,比如更新页面元素。 - **DOM更新**:利用jQuery提供的DOM操作方法,将接收到的数据插入到...
这段代码中,`clickButton`函数会在按钮被点击时触发,通过jQuery的`post`方法向服务器端发送请求,并指定回调函数为`callbackFun`,用于处理服务器返回的JSON数据。 **3. 处理Ajax请求的后端逻辑** 接下来,我们...
该方法接受多个参数,如URL(指向Struts2 Action的URL)、类型(GET或POST)、数据(要发送到服务器的数据,如果有的话)和回调函数。回调函数通常包括`success`、`error`和`complete`,分别在请求成功、失败和完成...
jQuery的$.ajax()方法可以创建一个Ajax请求,其参数包括URL、请求类型(GET或POST)、数据、回调函数等。例如: ```javascript $.ajax({ url: "actionName.action", // Struts2 Action的URL type: "POST", data:...
在jQuery中,$.ajax()函数用于发送异步请求,参数包括URL、类型(GET或POST)、数据、回调函数等。在省市联动的例子中,我们可能需要发送一个GET请求,携带当前选中的省份ID,服务器则返回对应的城市列表。 至于...
3. 在Ajax的success回调函数中,接收到服务器返回的验证结果,如果成功则更新页面状态,例如隐藏登录表单,显示欢迎信息;如果失败,则在相应位置显示错误提示。 4. 在Struts2的Action中,接收前端发送的用户名和...
最后,在成功回调函数中,我们可以解析接收到的JSON数据并根据需要更新页面。例如,如果我们接收到一个包含用户信息的JSON数组,可以遍历并显示这些信息: ```javascript success: function(response) { var users...
在这个简单的Ajax例子中,我们将探讨如何整合Struts2和jQuery来实现页面无刷新的数据更新。 首先,我们需要在项目中引入Struts2和jQuery的相关依赖。Struts2通常通过Maven或Gradle添加依赖库,包括核心库、struts2-...
- **jQuery的AJAX请求**:使用jQuery的$.ajax()方法,设置URL为Struts2的Action路径,成功回调函数内解析响应内容并更新DOM。 5. **示例代码**: - Struts2 Action代码可能如下: ```java public class ...
4. **jQuery的Ajax回调**:定义一个成功的回调函数,当Ajax请求成功时,这个函数会被调用。这里,你可以解析返回的JSON数据,并使用jQuery操作DOM,将数据展示在页面上。 5. **运行与测试**:将项目导入Eclipse,...
这通常涉及使用`$.ajax()`函数发送请求,以及在success回调中处理服务器返回的数据。 而在“jQuery+Ajax+Struts2”的例子中,Struts2 Action作为Ajax请求的终点,处理业务逻辑并返回结果。Struts2的配置文件...
5. **JQuery验证**:在Ajax的success回调函数中,接收到服务器返回的JSON数据后,根据返回的“success”或“error”判断验证结果。如果验证失败,显示错误信息;如果成功,可以继续进行提交或者跳转到其他页面。 6....
5. 数据处理:在jQuery的success回调函数中,可以使用`JSON.parse()`将JSON字符串解析为JavaScript对象,然后利用这些数据动态修改页面元素,实现无刷新更新。 6. 错误处理:同时,也要处理可能出现的错误,如网络...
在Ajax回调函数中,JavaScript会接收到服务器的响应,然后根据响应结果更新页面状态。例如,如果验证成功,可以显示欢迎信息,如果失败,则显示错误提示。 Sprint框架在这里可能用于管理服务层组件,如用户服务类,...
这个例子中,`success`回调函数会接收到Struts2返回的JSON数据,并将其解析,然后更新HTML页面。 4. **详细教程**:提供的教程可能涵盖从安装环境(如MyEclipse和Tomcat)、创建Struts2项目、配置Struts2、编写...
总结来说,Struts2整合jQuery实现Ajax功能,可以让前端和后端之间进行无缝通信,提供更加动态的用户体验。通过使用jQuery简化Ajax操作,开发者可以专注于业务逻辑而不是繁琐的异步请求处理。同时,Struts2的Action...
然后,`jQuery.post()` 发送请求到 'getKeyExist' 这个 Action,待后台验证完成后,回调函数 `callbackFun` 会接收到响应数据并处理,如显示对勾或红叉。 通过这种方式,Struts2 结合 jQuery 实现的 AJAX 功能可以...
5. **前端响应**:在Ajax的success回调函数中,解析服务器返回的数据。根据"success"字段的状态,向用户显示相应的提示信息。如果用户名可用,可以显示“用户名可用”;如果已被占用,显示“用户名已存在”。 6. **...
jQuery中的$.ajax()函数是实现Ajax的核心工具,通过它我们可以定制请求参数,如URL、请求类型(GET或POST)、数据格式(JSON、XML等)以及成功和错误回调函数。 **SQL Server数据库**: SQL Server是由微软公司开发...