第7讲:使用ajax技术实现弹出商品详情提示功能(xml数据)

news2024/11/16 9:30:25

使用ajax技术使用ajax技术实现弹出商品详情提示功能,本案例使用原生态xmlhttprequest对象,GET方法异步通讯,后台使用map保存搜索数据,查询到对应数据后,返回xml格式数据,前端使用responseXML属性返回xml格式数据,解析xml文件内容,结合JavaScript定位并显示商品详情。

ajax封装对象(ajax.js)

var xmlhttp=null;
//创建XMLHttpRequest对象
function createHttpRequest(){
    if(window.XMLHttpRequest){ //Mozilla 浏览器
        xmlhttp = new XMLHttpRequest();
    }else if(window.ActiveXObject){
        try{
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); //新版IE
        }catch(e){
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e){
                xmlhttp = null;
            }
        }
    }
    if(!xmlhttp){ //创建XMLHttpRequest失败
        alert("不能创建XMLHttpRequest对象实例");
    }
}
//发送函数
function sendRequest(method,url,param,callbackHandler){
    //创建对象
    createHttpRequest();
    //绑定事件,后台返回的数据,通过callback方法处理
    xmlhttp.onreadystatechange = callbackHandler;

    if(method=="get" || method=="GET"){
        //初始化发送信息
        xmlhttp.open(method,url + "?" + param,true);
        xmlhttp.send(null);
    }

    if(method=="post" || method=="POST"){
        //初始化发送信息
        xmlhttp.open(method,url,true);
        xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xmlhttp.send(param);
    }
}

前端页面(tip.html)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb18030" />
<title>Ajax应用举例</title>
<script type="text/javascript" src="../js/ajax.js"></script>
<script type="text/javascript">
	var eposx ;
	var eposy ;
	function showRequest(pid){
	    //获取鼠标当前位置
		eposx = event.offsetX;
		eposy = event.offsetY;
		var url="/ajaxProj/T2/tip.jsp";
		var params = 'pid='+ pid + '&time=' + (new Date()).toString() ;
		sendRequest('GET',url,params,showDetail);
	}
	
	//动态加载数据部门列表
	function showDetail(){
		if (xmlhttp.readyState == 4) { 
			if (xmlhttp.status == 200) {
				var membersData = xmlhttp.responseXML.getElementsByTagName("member");
				var membersList = document.getElementById("detail");
				//循环将数据插入列表框中
				var li = '<table>';
				for(var i=0;i<membersData.length;i++){
					var price=membersData[i].childNodes[0].firstChild.nodeValue;
					var num=membersData[i].childNodes[1].firstChild.nodeValue;
					var chandi=membersData[i].childNodes[2].firstChild.nodeValue;
					li += '<tr><td>价格:' + price + '</td></tr>';
					li += '<tr><td>数量:' + num + '</td></tr>';
					li += '<tr><td>产地:' + chandi + '</td></tr>';
				}
				li += '</table>';
				membersList.innerHTML = li;
				//移动到鼠标的位置
				setDivPosition();
				//显示div
				membersList.style.visibility='visible';
			} else { //页面不正常 
				alert("您请求的页面有异常"); 
			}
		}
	}
	//异常detail标签
	function hidendiv(){
		var membersList = document.getElementById("detail");
		membersList.innerHTML = '';
		membersList.style.visibility='hidden';
	}
	
	function setDivPosition(){
		var goodslist = document.getElementById('goodslist');
		eposx = goodslist.offsetLeft + goodslist.offsetWidth -2;
		eposy += goodslist.offsetTop + 2;
		var listdiv = document.getElementById('detail');
		listdiv.style.left=eposx+'px';
		listdiv.style.border='blue 1px solid';
		listdiv.style.top=eposy + 'px';
		listdiv.style.width='100px';
		listdiv.style.zIndex='999';
	}
</script>
</head>
<body>
<h1>数据提示</h1>
<hr />
商品列表:
<p id="goodslist" style="float:left;" onmouseout="hidendiv();">
<a href="javascript:void(0);" onmouseover="showRequest('p1');" >商品A</a><br/>
<a href="javascript:void(0);" onmouseover="showRequest('p2');" >商品B</a><br/>
<a href="javascript:void(0);" onmouseover="showRequest('p3');">商品C</a><br/>
</p>
<div id="detail" style="background-color:green;position:absolute;visibility:hidden">
</div>
</body>
</html>

后台功能(tip.jsp)

<%@ page contentType="text/xml; charset=gb18030"%><%@ page import="java.util.*"  %><%
	Map map = new HashMap();
	String p1 = "<member><price>10.5</price><num>50</num><chandi>北京</chandi></member>";
	String p2 = "<member><price>30</price><num>20</num><chandi>上海</chandi></member>";
	String p3 = "<member><price>50</price><num>10</num><chandi>武汉</chandi></member>";
	map.put("p1",p1);
	map.put("p2",p2);
	map.put("p3",p3);


	String pid= request.getParameter("pid");
	System.out.println(pid);
	StringBuffer sb = new StringBuffer();
	sb.append("<members>");	
	sb.append(map.get(pid).toString());
	sb.append("</members>");
	out.write("<?xml version='1.0' encoding='gb2312' ?>");
	out.write(sb.toString());
%>

特别说明:

1、页面顶部不能有任何注释行,不能有空格;

2、page指令与jsp代码之间不能有空行,不能有空格。

 运行效果

          

本人从事软件项目开发20多年,2005年开始从事Java工程师系列课程的教学工作,录制50多门精品视频课程,包含java基础,jspweb开发,SSH,SSM,SpringBoot,SpringCloud,人工智能,在线支付等众多商业项目,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂​​​​​​​

讲师课堂链接:https://edu.csdn.net/lecturer/893

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android模拟器无法启动

在Android 13版本上&#xff0c;关于“复制”有了新的变化&#xff0c;但是我在我的小米手机&#xff08;也是Android 13版本的&#xff09;上测试没有看到对应的变化&#xff0c;所以想运行一个Android 13的模拟器来测试看看&#xff0c;结果死活运行不起来&#xff0c;一直卡…

el-dialog父子传值弹窗实现(弹窗内容较多时分开写)

需求&#xff1a;父组件点击按钮后打开弹窗&#xff0c;但是因为弹窗内容巨多&#xff0c;直接提取出来&#xff0c;只要在父组件点击时才显示弹窗&#xff0c;并且传递值给弹窗做数据回显&#xff0c;编辑或者新增功能都可以。 1.首先建立父子关系 创建个弹窗组件dialog.vue&…

HTML5+CSS3+JS小实例:悬停滚动文字的导航栏

实例:悬停滚动文字的导航栏 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=…

Sql Server 获取连续日期时间

获取连续日期时间 在项目中&#xff0c;有时候需要按日期/时间统计&#xff0c;例如2023-06-21至2023-06-28期间每一天的数据&#xff0c;如果某一天没有数据&#xff0c;也要查询出来&#xff0c;用NULL处理。 1.示例 2.连续日期效果SQL DECLARE StartDate DATE 2023-06-2…

Vision Pro中VR游戏空间边界为3×3米圆形

6月25日青亭网报道&#xff0c;此前我们已经报道了苹果visionOS有三种应用类型&#xff1a;FullSpaces、Windows、Volume。其中FullSpaces是仅显示一款应用的类型&#xff0c;后两种为共享空间可多窗口、多应用显示。 在FullSpaces模式下&#xff0c;苹果的一份文档显示visionO…

应用层控制灯,自动创建设备节点,ioctl函数

目录 1. 使用应用层控制灯 1.1. 撰写驱动的.c文件 1.2. 撰写应用层的.c文件 1.3. 撰写makefile文件 1.4. 测验 2. 自动创建设备节点 2.1. 函数分析 2.2. 撰写驱动.c文件 2.3. 修改应用层.c文件 2.4. 编写makefile文件 2.5. 在开发板安装.ko驱动 3. ioctl函数&#…

2023年最新互联网Java面试八股文出炉(附大厂P5-P8技术栈)

为什么感觉 Java 面试变难了&#xff1f; 几年前&#xff0c;你只需要简单的ssm框架&#xff0c;就能轻松找到一份Java的工作&#xff0c;但现在不一样了&#xff0c;随着涌入这个行业的人越来越多&#xff0c;同一个岗位需要筛选掉更多人&#xff0c;要求自然水涨船高&#x…

mysql大文件导入sql,没有配置my-ini的情况下,或者配置文件不生效命令修改

找到mysql的bin用管理员登录mysql mysql -u root -p 修改最大传输包 set global max_allowed_packet 510241024*100;

3D扫描仪在汽车零部件产业的应用零部件逆向设计偏差检测-CASAIM

汽车零部件作为汽车工业的基础&#xff0c;是支撑汽车工业持续健康发展的必要因素。当前汽车行业正在轰轰烈烈、如火如荼开展的自主开发与创新&#xff0c;需要高效的零部件设计和质量控制解决发方案&#xff0c;CASAIM 3D扫描仪在汽车零部件产业中具有广泛的应用。 1. 零部件逆…

vue3案例2

效果图&#xff1a; <template><section><aside><ul class"nav-ul"><liclass"nav-li":class"nav.active && grey-li"v-for"nav in navArr":key"nav.id"click"onNav(nav)&qu…

实在RPA数字员工横扫618“物流拦截”难题,晨光拦截效率狂飙20倍!

历时三年疫情后&#xff0c;电商首个618大促告捷。 “百亿补贴”“击穿底价”“全网最低”“天天都是618”……在天猫的618启动会上&#xff0c;淘天集团CEO戴珊宣布这将是“历史上最大投入的一届618”&#xff1b;紧随其后的京东618启动会上&#xff0c;京东零售CEO辛利军也高…

消息队列中间件(二)- RabbitMQ(一)

RabbitMQ&#xff08;一&#xff09; 概念核心概念模式 名词安装 概念 接收&#xff0c;存储&#xff0c;转发消息 核心 概念 生产者 交换机 队列 消费者 模式 简单模式 工作模式 发布 路由模式 主题模式 发布订阅模式 名词 Broker 接收和分发消息的应用Virtual host 虚拟分组…

第二章 数据结构(二、三)——Trie树,并查集,堆与哈希表

文章目录 Trie树并查集堆哈希表拉链法开放寻址法字符串前缀哈希 Trie树练习题835. Trie字符串统计143. 最大异或对 并查集练习题836. 合并集合837. 连通块中点的数量240. 食物链 堆练习题838. 堆排序839. 模拟堆 哈希练习题840. 模拟散列表841. 字符串哈希 Trie树 用来高效的存…

面向初学者的卷积神经网络

卷积神经网络在机器学习中非常重要。如果你想做计算机视觉或图像识别任务&#xff0c;你根本离不开它们。但是很难理解它们是如何工作的。 在这篇文章中&#xff0c;我们将讨论卷积神经网络背后的机制、它的优点和应用领域。 什么是神经网络&#xff1f; 首先&#xff0c;让…

K8s是什么?

K8s是开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用。&#xff08;docker只能是单主机上的容器化的应用&#xff09; 职责&#xff1a;管理容器应用 目标&#xff1a;让部署容器化的应用简单高效 Rancher 可以通过界面管理 K8s 平台 一、让我们先来了解一个什…

nginx+lua(openresty) lua-protobuf 安装及使用(三)

前言 前2章已经讲述 openresty 安装及使用 这章主要讲述 openresty 环境下 lua-protobuf 安装及使用 1:环境 ubuntu18 lua-protobuf https://github.com/starwing/lua-protobuf protobuf https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.1 ##最的版本自行选择…

科技资讯|苹果Vision Pro头显处方镜片外观曝光

苹果公司在几周前推出了售价 3499 美元的 Vision Pro 头显&#xff0c;这款头显可以让用户体验增强现实和虚拟现实的内容。对于许多佩戴眼镜的用户来说&#xff0c;他们最关心的问题是&#xff0c;近视眼能够使用 Vision Pro。 Vision Pro 的一个亮点是&#xff0c;它可以配备…

前端修改单选框和多选框的样式(美化)

html提供了单选框和多选框的写法&#xff0c;但是样式并不好看&#xff0c;如图所示&#xff1a; 有时候设计图并不是这样的&#xff0c;需要修改&#xff0c;比如&#xff1a; 这里给大家提供思路&#xff0c;隐藏input框&#xff0c;文字加label标签&#xff0c;使得点击文字…

SPSSPRO数据分析之——CSI指纹数据分析(预处理、降维等)

目录 一、前言 二、数据准备 三、进行预处理 四、进行降维任务 五、正态性检测 六、描述性统计 七、频数分析 八、代码功能 一、前言 SPSSPRO是一款全新的在线数据分析平台&#xff0c;可以用于科研数据的分析、数学建模等&#xff0c;对于那些不会编程或者刚进入科…

浅析数据中台

note 很多企业更倾向于数据集中采集、存储&#xff0c;分层建设&#xff0c;集中管理运营数据资产。阿里的中台是从管理的角度出发&#xff0c;以中台事业部集中数据搜索&#xff0c;技术及产品&#xff0c;数据共享等多个部门的功能。 文章目录 note一、数据中台1. 传统企业的…