<script>alert(123);<script>

博客展示了一段JavaScript代码 <script>alert(123);<script>,此代码可实现弹窗显示数字123的功能,属于前端开发中的常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script>alert(123);<script>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0,shrink-to-fit=no, viewport-fit=cover"> <meta name="keywords" content="蓝桥到家"> <meta name="description" itemprop="description" content="生鲜副食、饮品乳品、鲜花蛋糕"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>在线支付</title> <link rel="stylesheet" type="text/css" href="../styles/reset.css" /> <link rel="stylesheet" type="text/css" href="../styles/iconfont/iconfont.css" /> <link rel="stylesheet" type="text/css" href="../styles/payment.css" /> <link rel="stylesheet" type="text/css" href="../styles/common.css" /> <script type="text/javascript" src="../js/common.js"></script> <script src="../js/zepto.min.js"></script> <script src="../js/data.js"></script> </head> <body> <div class="wrap"> <!-- 头部 start --> <header class="header_bar"> <a href="javascript:history.back()"> <div class="header_bar_back"></div> </a> <div class="header_bar_title">在线支付</div> </header> <!-- 头部 end --> <div class="container"> <!-- 订单信息部分 --> <div class="order-info"> <p id="storeName"> <i class="iconfont icon-xiajiantou" id="btnshow" style="font-size: .3rem;"></i> </p> <p id="totalPrice">¥ 0</p> </div> <!-- 订单明细部分 --> <ul class="order-detail" id="detailetBox"> <!-- 订单明细将通过JavaScript动态生成 --> </ul> <!-- 支付方式部分 --> <ul class="payment-type"> <li> <img src="../images/common/alipay.png"> </li> <li> <img src="../images/common/wechat.png"> </li> </ul> <div class="payment-button"> <button id="confirmPayBtn">确认支付</button> </div> </div> </div> </body> <script> $(function() { // 检查用户是否已登录 if (!checkLogin()) return; // 获取订单ID const urlParams = new URLSearchParams(window.location.search); const orderId = urlParams.get('orderId'); const orderIds = urlParams.get('orderIds'); if (!orderId && !orderIds) { alert('订单信息错误'); window.location.href = 'order.html'; return; } // 获取订单信息 const currentUser = JSON.parse(localStorage.getItem("currentUser")); const orderKey = `orders_${currentUser.phone}`; const allOrders = JSON.parse(localStorage.getItem(orderKey) || "[]"); let orders = []; let totalAmount = 0; if (orderId) { // 单个订单 const order = allOrders.find(o => o.id == orderId); if (!order) { alert('订单不存在'); window.location.href = 'order.html'; return; } orders = [order]; totalAmount = order.total; } else if (orderIds) { // 多个订单 const ids = orderIds.split(','); orders = allOrders.filter(o => ids.includes(o.id.toString())); if (orders.length === 0) { alert('订单不存在'); window.location.href = 'order.html'; return; } totalAmount = orders.reduce((sum, order) => sum + order.total, 0); } // 更新页面信息 if (orders.length === 1) { // 单个订单 $('#storeName').prepend(orders[0].storeName); } else { // 多个订单 $('#storeName').prepend(`多商家订单(${orders.length}个)`); } $('#totalPrice').text(`¥${formatPrice(totalAmount)}`); // 渲染订单明细 let detailHtml = ''; // 处理多个订单 orders.forEach((order, index) => { // 如果有多个订单,添加商家名称作为分隔 if (orders.length > 1) { detailHtml += ` <li class="store-header"> <p>${order.storeName}</p> <p>¥${formatPrice(order.total)}</p> </li> `; } // 添加商品明细 if (order.items && order.items.length > 0) { order.items.forEach(item => { const itemTotal = item.price * item.quantity; detailHtml += ` <li> <p>${item.name} x ${item.quantity}</p> <p>¥${formatPrice(itemTotal)}</p> </li> `; }); } // 添加配送费 detailHtml += ` <li> <p>配送费</p> <p>¥${formatPrice(order.deliveryFee)}</p> </li> `; // 如果不是最后一个订单,添加分隔线 if (index < orders.length - 1) { detailHtml += `<li class="divider"></li>`; } }); $('#detailetBox').html(detailHtml); // 明细展开/收起 $("#btnshow").click(function() { $("#detailetBox").toggle(); }); // 确认支付按钮点击事件 $('#confirmPayBtn').click(function() { // 更新订单状态 const updatedOrders = allOrders.map(o => { if (orderId && o.id == orderId) { return { ...o, status: "配送中", payTime: new Date().toLocaleString() }; } else if (orderIds && orderIds.split(',').includes(o.id.toString())) { return { ...o, status: "配送中", payTime: new Date().toLocaleString() }; } return o; }); localStorage.setItem(orderKey, JSON.stringify(updatedOrders)); // 跳转到订单页面 alert('支付成功,订单开始配送'); window.location.href = 'order.html'; }); }); </script> <style> .store-header { background-color: #f9f9f9; font-weight: bold; border-bottom: 1px solid #eee; } .divider { height: 8px; background-color: #f5f5f5; border-top: 1px solid #eee; border-bottom: 1px solid #eee; } #detailetBox li.divider { padding: 0; } </style> </html>解释每一行代码 给出整体逻辑
最新发布
07-17
<think>我们有一个在线支付页面,它从URL参数中获取订单ID(单个订单或多个订单),然后显示订单信息,并提供支付功能。 页面结构包括头部、订单信息展示、订单明细(可展开/收起)、支付方式选择(支付宝和微信)和确认支付按钮。 逻辑部分:检查登录状态,解析URL参数,获取订单数据,渲染页面,处理支付操作。 下面我将详细解释代码:</think># 在线支付页面代码详解 下面我将详细解释这个在线支付页面的代码逻辑和实现原理: ```html <!DOCTYPE html> <html lang="en"> <head> <!-- 页面元信息 --> <meta charset="utf-8"> <!-- 移动端适配设置 --> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0,shrink-to-fit=no, viewport-fit=cover"> <meta name="keywords" content="蓝桥到家"> <meta name="description" itemprop="description" content="生鲜副食、饮品乳品、鲜花蛋糕"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>在线支付</title> <!-- 样式表引入 --> <link rel="stylesheet" type="text/css" href="../styles/reset.css" /> <link rel="stylesheet" type="text/css" href="../styles/iconfont/iconfont.css" /> <link rel="stylesheet" type="text/css" href="../styles/payment.css" /> <link rel="stylesheet" type="text/css" href="../styles/common.css" /> <!-- JavaScript引入 --> <script type="text/javascript" src="../js/common.js"></script> <script src="../js/zepto.min.js"></script> <!-- 轻量级jQuery替代库 --> <script src="../js/data.js"></script> <!-- 应用数据相关函数 --> </head> <body> <div class="wrap"> <!-- 头部导航栏 --> <header class="header_bar"> <!-- 返回按钮 --> <a href="javascript:history.back()"> <div class="header_bar_back"></div> </a> <!-- 页面标题 --> <div class="header_bar_title">在线支付</div> </header> <!-- 主要内容容器 --> <div class="container"> <!-- 订单信息部分 --> <div class="order-info"> <!-- 店铺名称/订单标题,带下拉图标 --> <p id="storeName"> <i class="iconfont icon-xiajiantou" id="btnshow" style="font-size: .3rem;"></i> </p> <!-- 订单总金额 --> <p id="totalPrice">¥ 0</p> </div> <!-- 订单明细部分(初始为空,通过JS填充) --> <ul class="order-detail" id="detailetBox"> <!-- 订单明细将通过JavaScript动态生成 --> </ul> <!-- 支付方式选择 --> <ul class="payment-type"> <li> <img src="../images/common/alipay.png"> <!-- 支付宝图标 --> </li> <li> <img src="../images/common/wechat.png"> <!-- 微信支付图标 --> </li> </ul> <!-- 支付按钮 --> <div class="payment-button"> <button id="confirmPayBtn">确认支付</button> </div> </div> </div> <!-- 页面脚本 --> <script> $(function() { // 1. 检查用户是否已登录(未登录则跳转) if (!checkLogin()) return; // 2. 从URL参数获取订单ID const urlParams = new URLSearchParams(window.location.search); const orderId = urlParams.get('orderId'); // 单个订单ID const orderIds = urlParams.get('orderIds'); // 多个订单ID(逗号分隔) // 3. 验证订单ID参数 if (!orderId && !orderIds) { alert('订单信息错误'); window.location.href = 'order.html'; // 跳转到订单页面 return; } // 4. 获取当前用户信息 const currentUser = JSON.parse(localStorage.getItem("currentUser")); const orderKey = `orders_${currentUser.phone}`; // 用户订单存储键名 // 5. 从本地存储加载所有订单 const allOrders = JSON.parse(localStorage.getItem(orderKey) || "[]"); // 6. 根据URL参数过滤出需要支付的订单 let orders = []; // 需要支付的订单列表 let totalAmount = 0; // 订单总金额 if (orderId) { // 单个订单支付场景 const order = allOrders.find(o => o.id == orderId); if (!order) { alert('订单不存在'); window.location.href = 'order.html'; return; } orders = [order]; totalAmount = order.total; // 单个订单总金额 } else if (orderIds) { // 多个订单合并支付场景 const ids = orderIds.split(','); // 分割订单ID字符串 orders = allOrders.filter(o => ids.includes(o.id.toString())); if (orders.length === 0) { alert('订单不存在'); window.location.href = 'order.html'; return; } // 计算多个订单的总金额 totalAmount = orders.reduce((sum, order) => sum + order.total, 0); } // 7. 更新页面显示信息 if (orders.length === 1) { // 单个订单:显示店铺名称 $('#storeName').prepend(orders[0].storeName); } else { // 多个订单:显示订单数量 $('#storeName').prepend(`多商家订单(${orders.length}个)`); } // 格式化并显示总金额 $('#totalPrice').text(`¥${formatPrice(totalAmount)}`); // 8. 渲染订单明细 let detailHtml = ''; // 处理多个订单 orders.forEach((order, index) => { // 如果有多个订单,添加商家名称作为分隔头 if (orders.length > 1) { detailHtml += ` <li class="store-header"> <p>${order.storeName}</p> <!-- 店铺名称 --> <p>¥${formatPrice(order.total)}</p> <!-- 店铺订单总金额 --> </li> `; } // 添加商品明细 if (order.items && order.items.length > 0) { order.items.forEach(item => { const itemTotal = item.price * item.quantity; // 单个商品总价 detailHtml += ` <li> <p>${item.name} x ${item.quantity}</p> <!-- 商品名称和数量 --> <p>¥${formatPrice(itemTotal)}</p> <!-- 商品总价 --> </li> `; }); } // 添加配送费 detailHtml += ` <li> <p>配送费</p> <p>¥${formatPrice(order.deliveryFee)}</p> <!-- 配送费 --> </li> `; // 如果不是最后一个订单,添加分隔线 if (index < orders.length - 1) { detailHtml += `<li class="divider"></li>`; <!-- 订单分隔线 --> } }); // 将生成的HTML插入到页面中 $('#detailetBox').html(detailHtml); // 9. 明细展开/收起功能 $("#btnshow").click(function() { $("#detailetBox").toggle(); // 切换明细显示状态 }); // 10. 支付按钮点击事件处理 $('#confirmPayBtn').click(function() { // 更新订单状态 const updatedOrders = allOrders.map(o => { // 检查当前订单是否需要更新 const shouldUpdate = (orderId && o.id == orderId) || (orderIds && orderIds.split(',').includes(o.id.toString())); if (shouldUpdate) { // 更新订单状态和支付时间 return { ...o, status: "配送中", payTime: new Date().toLocaleString() }; } return o; // 不需要更新的订单原样返回 }); // 保存更新后的订单数据 localStorage.setItem(orderKey, JSON.stringify(updatedOrders)); // 提示用户并跳转到订单页面 alert('支付成功,订单开始配送'); window.location.href = 'order.html'; }); }); </script> <!-- 内联样式 --> <style> /* 店铺标题样式 */ .store-header { background-color: #f9f9f9; /* 浅灰色背景 */ font-weight: bold; /* 加粗字体 */ border-bottom: 1px solid #eee; /* 底部边框 */ } /* 订单分隔线样式 */ .divider { height: 8px; /* 高度 */ background-color: #f5f5f5; /* 背景色 */ border-top: 1px solid #eee; /* 上边框 */ border-bottom: 1px solid #eee; /* 下边框 */ } /* 调整分隔线li元素的填充 */ #detailetBox li.divider { padding: 0; /* 去除内边距 */ } </style> </body> </html> ``` ## 整体逻辑分析 ### 1. 页面加载流程 ```mermaid graph TD A[页面加载] --> B[检查登录状态] B -->|未登录| C[跳转到登录页] B -->|已登录| D[解析URL参数] D --> E{订单参数} E -->|单个订单| F[获取单个订单] E -->|多个订单| G[获取多个订单] F --> H[验证订单存在] G --> H H -->|订单不存在| I[提示并跳转] H -->|订单存在| J[计算总金额] J --> K[渲染订单信息] K --> L[绑定事件处理] ``` ### 2. 核心功能实现 #### 2.1 订单数据管理 - **数据存储**:使用 `localStorage` 存储用户订单数据 - **键名设计**:`orders_用户手机号` 确保用户数据隔离 - **数据结构**: ```javascript { id: 123, // 订单ID storeName: "鲜果店", // 店铺名称 total: 58.5, // 订单总金额 deliveryFee: 5, // 配送费 items: [ // 商品列表 { name: "苹果", price: 5.99, quantity: 3 } ], status: "待支付", // 订单状态 payTime: "" // 支付时间 } ``` #### 2.2 订单处理逻辑 - **单个订单支付**:通过 `orderId` 参数处理 - **多订单合并支付**:通过 `orderIds` 参数处理(逗号分隔的ID列表) - **金额计算**: ```javascript // 单个订单总金额 totalAmount = order.total; // 多订单总金额 totalAmount = orders.reduce((sum, order) => sum + order.total, 0); ``` #### 2.3 订单明细渲染 - **多订单显示**:每个订单添加店铺标题和分隔线 - **商品明细**:显示商品名称、数量和总价 - **配送费**:单独显示在商品列表下方 #### 2.4 支付流程 1. 用户点击"确认支付"按钮 2. 更新订单状态为"配送中" 3. 记录支付时间 4. 保存更新后的订单数据 5. 提示用户并跳转到订单页面 ### 3. 关键设计特点 1. **响应式设计**: ```html <meta name="viewport" content="width=device-width, initial-scale=1, ..."> ``` - 适配移动设备 2. **用户友好的交互**: - 明细展开/收起功能 - 多订单清晰分隔 - 支付成功提示 3. **安全机制**: - 登录验证 (`checkLogin()`) - 订单存在性检查 - 用户数据隔离 4. **数据格式化**: ```javascript function formatPrice(price) { return parseFloat(price).toFixed(2); } ``` - 统一价格显示格式 5. **状态管理**: - 订单状态转换(待支付 → 配送中) - 支付时间记录 ## 潜在问题与改进建议 ### 1. 安全问题 - **风险**:本地存储的订单数据可能被篡改 - **改进**:添加数据签名验证 ```javascript // 示例:添加数据签名 function saveOrders(orders) { const data = JSON.stringify(orders); const signature = md5(data + SECRET_KEY); localStorage.setItem(orderKey, data); localStorage.setItem(orderKey + '_sig', signature); } ``` ### 2. 支付方式处理 - **当前状态**:仅显示支付图标,无实际支付功能 - **改进**:集成支付网关API ```javascript // 示例:调用支付宝支付接口 function payWithAlipay(orderIds, amount) { // 调用支付网关API fetch('/api/create-payment', { method: 'POST', body: JSON.stringify({ orderIds, amount, type: 'alipay' }) }) .then(response => response.json()) .then(data => { if(data.success) { window.location.href = data.paymentUrl; } }); } ``` ### 3. 订单状态管理 - **改进**:添加更丰富的订单状态 ```javascript const ORDER_STATUS = { PENDING: "待支付", PAID: "已支付", DELIVERING: "配送中", COMPLETED: "已完成", CANCELED: "已取消" }; ``` ### 4. 错误处理增强 - **改进**:添加更详细的错误提示 ```javascript // 示例:增强错误处理 try { // 业务逻辑 } catch (error) { console.error('支付处理失败:', error); alert(`支付失败: ${error.message || '未知错误'}`); } ``` ## 总结 这个在线支付页面实现了以下核心功能: 1. 用户登录验证 2. 订单信息加载与验证 3. 订单明细动态渲染 4. 多订单合并支付处理 5. 支付状态更新 6. 用户友好的交互设计 页面设计简洁明了,代码结构清晰,通过本地存储模拟了订单管理系统的核心功能。在实际应用中,可以进一步集成第三方支付API,添加服务器端验证,并增强错误处理机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值