婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 妙用Ajax技術實現局部刷新商品數量和總價實例代碼

妙用Ajax技術實現局部刷新商品數量和總價實例代碼

熱門標簽:云呼外撥網絡電話系統 超級大富翁地圖標注 越南河內地圖標注 騰訊地圖標注位置能用多久 個人怎樣在百度地圖標注地名 機器人電銷騙局揭秘 地圖標注項目怎么樣 ai機器人電銷資源 硅語電話機器人公司

1. 問題的分析

  先看一下頁面中的情況:

 

  功能如上,在沒有Ajax之前,一般都是根據用戶修改的值去找Action,然后返回新的jsp頁面重新加載整個頁面,完成數字的更新。但是有了Ajax技術后,我們可以利用Ajax技術局部刷新要改變的地方,而不是重新加載整個頁面。首先看一下上圖對應的jsp部分的代碼:

div class="section_container">
!-- 購物車 -->
div id="shopping_cart">
div class="message success">我的購物車/div>
table class="data-table cart-table" cellpadding="0" cellspacing="0">
tr>
th class="align_center" width="10%">商品編號/th>
th class="align_left" width="35%" colspan="2">商品名稱/th>
th class="align_center" width="10%">銷售價格/th>
th class="align_center" width="20%">數量/th>
th class="align_center" width="15%">小計/th>
th class="align_center" width="10%">刪除/th>
/tr>
c:forEach items="${sessionScope.forder.sorders }" var="sorder" varStatus="num">
tr lang="${sorder.product.id}">
td class="align_center">a href="#" class="edit">${num.count }/a>/td>
td width="80px">img src="${shop}/files/${sorder.product.pic}" width="80" height="80" />/td>
td class="align_left">a class="pr_name" href="#">${sorder.name }/a>/td>
td class="align_center vline">${sorder.price }/td>
td class="align_center vline">
!-- 文本框 -->
input class="text" style="height: 20px;" value="${sorder.number }" lang="${sorder.number }"> 
/td>
td class="align_center vline">${sorder.price*sorder.number }/td>
td class="align_center vline">a href="#" class="remove">/a>/td>
/tr>
/c:forEach>
/table>
!-- 結算 -->
div class="totals">
table id="totals-table">
tbody>
tr>
td width="60%" colspan="1" class="align_left">strong>小計/strong>/td>
td class="align_right" style="">strong>¥span
class="price" id="total">${sessionScope.forder.total}/span>
/strong>/td>
/tr>
tr>
td width="60%" colspan="1" class="align_left">運費/td>
td class="align_right" style="">¥span class="price" id="yunfei">0.00/span>/td>
/tr>
tr>
td width="60%" colspan="1" class="align_left total">strong>總計/strong>/td>
td class="align_right" style="">¥span class="total" id="totalAll">strong>${sessionScope.forder.total}/strong>/span>
/td>
/tr>
/tbody>
/table>
div class="action_buttonbar">
font>a href="${shop}/user/confirm.jsp">
button type="button" title="" class="checkout fr" style="background-color: #f38256;">訂單確認/button>/a>
/font>
font>a href="#">
button type="button" title="" class=" fr">
font>清空購物車/font>
/button>
/font>
a href="${shop}/index.jsp">
button type="button" title="" class="continue fr">
font>繼續購物/font>
/button>/a>
div style="clear:both">/div>
/div>
/div>
/div>

  看著貌似很多的樣子,其實功能很簡單,就是從域中拿出相應的數據顯示出來而已,我們現在要實現上面描述的功能的話,先來分析一下思路:

首先得注冊一個事件:即修改了數量那里的文本框觸發的事件;

在該事件中,我們拿到用戶輸入的數,判斷輸入的合法性,因為要防止用戶亂輸入;

如果合法,通過Ajax請求將數據發送到后臺;

后臺針對新的數量,調用相應的業務邏輯方法得到新的結果,并將其通過流返回到前臺;

Ajax收到結果后,再對相應位置的數據進行更新。整個流程就走完了。

如果非法,則顯示修改前的數字。不做任何處理

2. Ajax請求的實現

分析完了流程,接下來我們就著手去實現了,首先把js部分的代碼貼在這,然后我們根據上面的流程詳細分析:

script type="text/javascript">
$(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的值,也就是商品的id
var 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");
}
})
})
/script>

2.1 注冊事件

  我們看上面的代碼可知,注冊事件首先要定位到這個文本框,這里是通過類選擇器來定位的,因為是文本框,所以用change()來注冊該事件,然后在里面定義一個function()函數來處理該事件。

2.2 判斷數據合法性

  好了,注冊好了事件后,我們首先要對用戶輸入的數進行合法性判斷,因為用戶可能輸入了0或者負數,可能輸入了小數,甚至輸入了字母或其他字符等等。所以要進行驗證。

isNaN(number)表示若number不是數字就返回真,我們可以用這個函數來判斷是否為數字;parseInt(number)表示對數組進行取整,然后跟它自身進行比較,我們巧妙的運用了這個來判斷number是否為整數。

2.3 發送Ajax請求

  如果數據是合法的,我們獲取該數據后,就可以向后臺發送Ajax請求了,我們需要考慮一個問題:需要傳哪些參數呢?首先用戶想要更新數量,毫無疑問,用戶輸入的數字肯定要傳過去,其次到底傳哪個商品呢?也就是說我們需要獲取用戶想要修改的商品的id號,知道了要傳的參數后,我們想辦法獲取id號即可。

  這里有一個問題,用戶的購物車里可能不止一件商品,很自然的會想到,如果能用一條語句可以拿到不同商品的id,就非常好了,因此,想到了可以使用該文本框的父標簽,因為不同的商品它的父標簽都一樣,都是第一個tr>標簽,所以我們把商品的id放在那個tr>標簽中的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 BaseActionSorder> {
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 BaseServiceSorder> {
//省去無關的代碼……
//根據商品id和數量更新商品數量
public Forder updateSorder(Sorder sorder, Forder forder);
}
//SorderServiceImpl實現類
@Service("sorderService")
public class SorderServiceImpl extends BaseServiceImplSorder> implements
SorderService {
//省略無關的代碼……
@Override
public 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”配在了global-result>里面,如下

global-results>
!-- 省去其他公共配置 -->
result name="stream" type="stream">
param name="inputName">inputStream/param>
/result>
/global-results>

   好了,現在Action中計算出的總價格就可以通過流的形式傳到前臺了,Ajax就可以在它的function中接收到,放到total中了,跟前面的就接上了。

以上所述是小編給大家介紹的妙用Ajax技術局部刷新商品數量和總價實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:
  • php+ajax實現商品對比功能示例
  • jQuery+Ajax請求本地數據加載商品列表頁并跳轉詳情頁的實現方法
  • php實現的簡單美國商品稅計算函數
  • 利用ajax+php實現商品價格計算

標簽:林芝 洛陽 舟山 遼源 鄭州 內蒙古 海南 邢臺

巨人網絡通訊聲明:本文標題《妙用Ajax技術實現局部刷新商品數量和總價實例代碼》,本文關鍵詞  妙用,Ajax,技術,實現,局部,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《妙用Ajax技術實現局部刷新商品數量和總價實例代碼》相關的同類信息!
  • 本頁收集關于妙用Ajax技術實現局部刷新商品數量和總價實例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    在线不卡一区二区| 色天天综合久久久久综合片| 亚洲高清不卡在线| 日韩美女视频一区| 国产精品久久毛片av大全日韩| 久久久久久久久岛国免费| 日韩美一区二区三区| 日韩精品一区二区三区老鸭窝 | 91丨porny丨蝌蚪视频| 国产黑丝在线一区二区三区| 国产一区二区成人久久免费影院| 国产精品99久| 岛国av在线一区| 91福利资源站| 欧美日韩精品系列| 日韩欧美国产1| 日本一区二区三区国色天香| 国产精品久久久久久久久动漫 | 亚洲欧美一区二区三区国产精品| 中文字幕日本不卡| 亚洲国产精品一区二区www | www.综合网.com| 在线观看日韩高清av| 555www色欧美视频| 久久这里只精品最新地址| 欧美激情综合五月色丁香| 国产精品电影院| 午夜精品视频在线观看| 国产一区二区三区在线观看免费 | 欧美亚男人的天堂| 欧美一级免费大片| 国产精品视频九色porn| 亚洲宅男天堂在线观看无病毒| 日韩av一二三| 99久久夜色精品国产网站| 欧美日韩精品一区二区在线播放 | 99久久亚洲一区二区三区青草| 欧美日韩亚洲丝袜制服| 久久久久久麻豆| 一片黄亚洲嫩模| 国产成人av网站| 欧美日韩一区二区三区在线| 国产网站一区二区| 日韩精品一卡二卡三卡四卡无卡| 国产精品亚洲专一区二区三区 | 日本中文一区二区三区| 99久久精品免费看国产免费软件| 宅男噜噜噜66一区二区66| 欧美高清在线一区| 激情伊人五月天久久综合| 91福利精品视频| 欧美国产国产综合| 国产精品一区二区你懂的| 欧美精品亚洲一区二区在线播放| 国产亚洲成av人在线观看导航| 日本欧美一区二区| 欧美综合天天夜夜久久| 国产女同性恋一区二区| 国产一区二区三区香蕉| 欧美一区午夜视频在线观看 | 国产精品99久| 日韩欧美国产小视频| 亚洲成人在线观看视频| av高清久久久| 国产精品天干天干在线综合| 国产主播一区二区| 精品欧美一区二区久久| 老汉av免费一区二区三区| 欧美日韩精品一区视频| 亚洲成人动漫在线免费观看| 91成人免费网站| 亚洲韩国精品一区| 欧美日韩一区三区| 亚洲国产日韩一级| 欧美三级资源在线| 日韩国产欧美三级| 日韩精品一区二区三区三区免费| 日本伊人色综合网| 日韩欧美一区电影| 激情综合色播激情啊| 久久这里只有精品视频网| 国产精品一二三四| 1区2区3区欧美| 91麻豆国产香蕉久久精品| 亚洲同性gay激情无套| 97超碰欧美中文字幕| 亚洲四区在线观看| 91黄色免费版| 蜜臀av一级做a爰片久久| 日韩视频一区二区三区在线播放| 精品系列免费在线观看| 欧美国产日韩一二三区| 91网站最新网址| 亚洲午夜国产一区99re久久| 欧美精品第1页| 国模套图日韩精品一区二区| 中日韩免费视频中文字幕| 色婷婷久久综合| 日本欧美一区二区在线观看| 日本一区二区三级电影在线观看| 成人av在线资源网| 丝袜美腿亚洲色图| 久久久不卡网国产精品二区| 色综合中文综合网| 丁香婷婷综合色啪| 亚洲一区二区精品视频| 欧美一级一区二区| av不卡一区二区三区| 午夜久久久久久| 日本一区二区不卡视频| 欧美午夜精品一区| 国产一区二区三区蝌蚪| 伊人一区二区三区| 久久久亚洲精品一区二区三区| 97se亚洲国产综合自在线观| 免费看日韩精品| 综合自拍亚洲综合图不卡区| 欧美一级二级在线观看| 99在线精品一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲成av人片在线观看| 久久老女人爱爱| 欧美日韩色一区| av激情成人网| 精品一区精品二区高清| 污片在线观看一区二区| 亚洲欧洲国产专区| 久久一日本道色综合| 精品视频一区三区九区| 99久久精品情趣| 国产成人三级在线观看| 男男gaygay亚洲| 全部av―极品视觉盛宴亚洲| 亚洲午夜一区二区三区| 亚洲色图在线看| 国产精品麻豆99久久久久久| 久久综合久久99| 日韩欧美国产麻豆| 欧美久久婷婷综合色| 欧美吻胸吃奶大尺度电影 | 99久久精品国产网站| 国产精品一区二区91| 老汉av免费一区二区三区| 日韩国产一区二| 亚洲aaa精品| 图片区日韩欧美亚洲| 亚洲综合一二区| 亚洲在线视频一区| 亚洲国产精品精华液网站| 亚洲高清视频的网址| 亚洲一区在线看| 视频一区在线播放| 精品影院一区二区久久久| 国产一区二区毛片| 高清在线观看日韩| 99视频精品全部免费在线| 97超碰欧美中文字幕| 欧美系列一区二区| 欧美一二三四在线| 精品国产91九色蝌蚪| 欧美激情综合在线| 日韩理论片中文av| 亚洲午夜羞羞片| 极品少妇一区二区三区精品视频| 久久99蜜桃精品| 国产99久久久久| 色欧美乱欧美15图片| 欧美丰满嫩嫩电影| 2023国产一二三区日本精品2022| 久久久蜜桃精品| 亚洲欧洲中文日韩久久av乱码| 亚洲主播在线观看| 麻豆精品一区二区| 99国产一区二区三精品乱码| 一本大道av一区二区在线播放 | 在线亚洲高清视频| 日韩欧美国产电影| 国产精品色在线| 亚洲电影一级片| 国产一区二区三区免费在线观看| 成人丝袜视频网| 欧美亚一区二区| 国产亚洲精品超碰| 一区二区日韩电影| 狠狠色狠狠色综合系列| 92国产精品观看| 欧美一区二区福利视频| 国产精品欧美经典| 免费欧美在线视频| 97久久精品人人做人人爽50路| 91精品啪在线观看国产60岁| 国产精品欧美极品| 男人的j进女人的j一区| 99精品视频在线免费观看| 精品国产乱码久久久久久老虎| 亚洲婷婷综合久久一本伊一区| 日本不卡的三区四区五区| www.欧美日韩| 久久久亚洲精品石原莉奈| 亚洲成年人影院|