妙用Ajax技术实现局部刷新商品数量和总价实例代码

这篇文章主要给大家介绍妙用ajax技术实现局部刷新商品数量和总价实例代码,非常不错,需要的朋友一起看看吧

1. 问题的分析

  先看一下页面中的情况:

页面情况 

  功能如上,在没有Ajax之前,一般都是根据用户修改的值去找Action,然后返回新的jsp页面重新加载整个页面,完成数字的更新。但是有了Ajax技术后,我们可以利用Ajax技术局部刷新要改变的地方,而不是重新加载整个页面。首先看一下上图对应的jsp部分的代码:

我的购物车

登录后复制

商品编号 商品名称 销售价格 数量 小计 删除

${num.count }妙用Ajax技术实现局部刷新商品数量和总价实例代码${sorder.name }${sorder.price } ${sorder.price*sorder.number }

小计¥${sessionScope.forder.total}运费¥0.00总计${sessionScope.forder.total}

  看着貌似很多的样子,其实功能很简单,就是从域中拿出相应的数据显示出来而已,我们现在要实现上面描述的功能的话,先来分析一下思路:

首先得注册一个事件:即修改了数量那里的文本框触发的事件;

在该事件中,我们拿到用户输入的数,判断输入的合法性,因为要防止用户乱输入;

如果合法,通过Ajax请求将数据发送到后台;

后台针对新的数量,调用相应的业务逻辑方法得到新的结果,并将其通过流返回到前台;

Ajax收到结果后,再对相应位置的数据进行更新。整个流程就走完了。

如果非法,则显示修改前的数字。不做任何处理

2. Ajax请求的实现

分析完了流程,接下来我们就着手去实现了,首先把js部分的代码贴在这,然后我们根据上面的流程详细分析:

$(function(){//1. 注册事件$(".text").change(function(){//2. 验证数据的有效性var number = this.value; //也可以使用$(this).val();//isNaN(number)表示若number不是数字就返回真if(!isNaN(number) && parseInt(number)==number && number>0){ //如果合法,同步更新的数$(this).attr("lang", number);//找到当前标签中第一个是tr的父节点,然后拿到属性为lang的值,也就是商品的idvar pid = $(this).parents("tr:first").attr("lang");//发送Ajax请求,传输当前的数量与商品的id,返回修改数量后的总价格$.post("sorder_updateSorder.action", {number:number, 'product.id':pid},function(total){ $("#total").html(total); //所有商品小计var yunfei = $("#yunfei").html();$("#totalAll").html((total*1 + yunfei*1).toFixed(2));//所有商品小计和运费的和}, "text");//计算单个商品的小计,保留两位小数var price = ($(this).parent().prev().html()*number).toFixed(2);$(this).parent().next().html(price);} else {//如果非法,还原为刚刚合法的数this.value = $(this).attr("lang");}})})

登录后复制

2.1 注册事件

  我们看上面的代码可知,注册事件首先要定位到这个文本框,这里是通过类选择器来定位的,因为是文本框,所以用change()来注册该事件,然后在里面定义一个function()函数来处理该事件。

2.2 判断数据合法性

  好了,注册好了事件后,我们首先要对用户输入的数进行合法性判断,因为用户可能输入了0或者负数,可能输入了小数,甚至输入了字母或其他字符等等。所以要进行验证。

isNaN(number)表示若number不是数字就返回真,我们可以用这个函数来判断是否为数字;parseInt(number)表示对数组进行取整,然后跟它自身进行比较,我们巧妙的运用了这个来判断number是否为整数。

2.3 发送Ajax请求

  如果数据是合法的,我们获取该数据后,就可以向后台发送Ajax请求了,我们需要考虑一个问题:需要传哪些参数呢?首先用户想要更新数量,毫无疑问,用户输入的数字肯定要传过去,其次到底传哪个商品呢?也就是说我们需要获取用户想要修改的商品的id号,知道了要传的参数后,我们想办法获取id号即可。

  这里有一个问题,用户的购物车里可能不止一件商品,很自然的会想到,如果能用一条语句可以拿到不同商品的id,就非常好了,因此,想到了可以使用该文本框的父标签,因为不同的商品它的父标签都一样,都是第一个

标签,所以我们把商品的id放在那个标签中的lang属性里,为什么要放在lang属性里呢?因为lang属性基本不会用到,它是用来定义语言的,而且用lang属性还不容易和其他属性冲突~这样我们就可以通过$(this).parents(“tr:first”).attr(“lang”);来获取商品的id了。

接下来开始发送Ajax请求,使用post方式发送,post方法中有四个参数:

第一个参数是要发送到的Action

第二个参数是要传过去的参数,使用的是json格式

第三个参数是一个function(result),result是用来接收后台穿过来的数据

第四个方式是规定接收什么类型的数据,json表示接收json数据,text表示接收流

  从后台返回的total是所有商品的总价格,所以在function中,首先我们根据id拿到所有商品小计的元素然后赋值为total即可,totalAll是加了运费的总价,后面那个toFixes(2)表示保留两位小数。然后再拿到单个商品小计的元素,计算一下单个商品的小计,这样前台页面在没有重新载入的情况下,更新了我们想要更新的部分,这就是Ajax强大的地方,这个和前面EasyUI一样的,EasyUI也是Ajax请求。

   好了,关于Ajax部分到这里就介绍完了,下面是后台的处理刚刚的请求,是针对自己这个项目的,用来记录项目进度用的。

3. 后台的更新

  刚刚Ajax请求的action是SortedAction中的updateSorder()方法,所以我们去SorderAction中完成updateSorder()方法:

@Controller@Scope("prototype")public class SorderAction extends BaseAction {public String addSorder() {//省略无关的代码……//根据商品编号更新商品数量public String updateSorder() {Forder forder = (Forder) session.get("forder");//更新购物项,传进来的product.id被封装到了model中forder = sorderService.updateSorder(model, forder);//计算新的总价格forder.setTotal(forderService.cluTotal(forder));session.put("forder", forder);//以流的形式返回新的总价格inputStream = new ByteArrayInputStream(forder.getTotal().toString().getBytes());return "stream";}}

登录后复制

相应的Service中的方法完善如下:

//SorderService接口public interface SorderService extends BaseService {//省去无关的代码……//根据商品id和数量更新商品数量public Forder updateSorder(Sorder sorder, Forder forder);}//SorderServiceImpl实现类@Service("sorderService")public class SorderServiceImpl extends BaseServiceImpl implementsSorderService {//省略无关的代码……@Overridepublic Forder updateSorder(Sorder sorder, Forder forder) {for(Sorder temp : forder.getSorders()) {if(temp.getProduct().getId().equals(sorder.getProduct().getId())) {temp.setNumber(sorder.getNumber());}}return forder;}}

登录后复制

最后struts.xml文件中的配置,是把”stream”配在了里面,如下

inputStream

登录后复制

   好了,现在Action中计算出的总价格就可以通过流的形式传到前台了,Ajax就可以在它的function中接收到,放到total中了,跟前面的就接上了。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

完美解决ajax访问遇到Session失效的问题

ajax内部值外部调用不了的原因及解决方法

全面解析Ajax综合应用

以上就是妙用Ajax技术实现局部刷新商品数量和总价实例代码的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2758522.html

(0)
上一篇 2025年3月8日 08:12:40
下一篇 2025年2月22日 20:22:10

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Ajax发送和接收二进制字节流数据的方法

    这篇文章主要介绍了ajax发送和接收二进制字节流数据的方法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧 HTML5 Ajax 2.0标准中,增强了Ajax的许多功能,包括发送FormData数据,上传数据进度条等诸多功能。但实际上,…

    编程技术 2025年3月8日
    200
  • laypage前端分页插件实现ajax异步分页

    laypage是一款多功能的js分页组件,即适用于异步分页,又可用于传统的整页刷新跳页,还支持信息流加载,并且可无缝迁移至node.js平台,这篇文章主要介绍了laypage前端分页插件,实现ajax异步分页,需要的朋友可以参考下 本文实例…

    编程技术 2025年3月8日
    200
  • ajax文件上传成功 解决浏览器兼容问题

    这篇文章主要为大家详细介绍了ajax文件上传的相关资料,成功解决了浏览器兼容问题,感兴趣的小伙伴们可以参考一下 ajaxfileupload控制很好用,不过发现上传文件后的结果为被浏览器处理,IE不会,谷哥和火狐都会进行处理,而且谷哥和火狐…

    编程技术 2025年3月8日
    200
  • ajax验证用户名和密码的实例代码

    这篇文章主要为大家详细介绍了ajax验证用户名和密码的实例代码,感兴趣的小伙伴们可以参考一下 本文实例为大家介绍了ajax验证用户名和密码的具体代码,供大家参考,具体内容如下 1.ajax主体部分     var xmlrequest;fu…

    编程技术 2025年3月8日
    200
  • AJAX的原理—如何做到异步和局部刷新

    如何做到异步和局部刷新?下面小编就为大家带来一篇ajax的原理—如何做到异步和局部刷新。现在分享给大家,也给大家做个参考。 Overriew: onReadyStateChange被回调函数赋值,则能实现异步调用,回调函数直接操作DOM,则…

    编程技术 2025年3月8日
    200
  • 如何使用AJAX实现按需加载

    如何使用ajax实现按需加载?下面我就为大家带来一篇如何使用ajax实现按需加载【推荐】。我觉得挺不错的,现在分享给大家,也给大家做个参考。 按需加载的优势:在实际调查中发现,很多的网民在游览网站时具有明确的指向性,往往在进入主页后直接搜索…

    编程技术 2025年3月8日
    200
  • Ajax验证用户的唯一性

    这篇文章主要介绍了ajax验证用户的唯一性,验证环境ajax+jquery+json+struts2,感兴趣的小伙伴们可以参考一下 针对初学者,学习Ajax验证用户的唯一性实战是为了巩固Ajax,Jquery,Json与Struts2基础知…

    2025年3月8日 编程技术
    200
  • 探讨Ajax中的一些小问题

    在ajax使用过程经常会遇到各种各样的问题,今天我给大家分享ajax中的一些小问题,比较实用,感兴趣的朋友可以参考下 1.ajax跨域传递值是所需要的回传的类型为jsonp $.ajax({url: “http://…….”,typ…

    编程技术 2025年3月8日
    200
  • ajax回调打开新窗体防止浏览器拦截有效方法_AJAX相关

    这篇文章主要为大家详细介绍了ajax回调打开新窗体防止浏览器拦截的有效方法,感兴趣的朋友可以参考一下 ajax回调打开新窗体防止浏览器拦截,就这么做! 问题剖析: function click_fun(){    window.open(“…

    编程技术 2025年3月8日
    200
  • 通过构造AJAX参数实现表单元素JSON相互转换

    这篇文章主要介绍了通过构造ajax参数实现表单元素json相互转换 的相关介绍,需要的朋友可以参考下 ajax提交服务器数据, 整理一下转换方法。 HTML: 登录后复制 1.表单元素转QueryString var q = $(‘#fm,…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论