异步ajax调用
- 格式:doc
- 大小:34.00 KB
- 文档页数:2
layui-tree实现Ajax异步请求后动态添加节点的⽅法最近在弄⼀个产品分类管理,是⼀个树形菜单的形式,⽤的是layui-tree ,由于它并没有动态添加节点,所以只能⾃⼰刚了。
⼤概效果如图体的实现是当我⿏标移⼊“长袖”这个分类时,出现三个icon (如图),按“增加”按钮,会发送ajax异步请求到后台,在数据库库中增加以“长袖”为⽗类id 的⼀个⼦分类,成功后返回到前台,然后相应的节点下动态添加⼦节点,主要是通过append 来增加html元素<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>多级分类管理</title><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="format-detection" content="telephone=no"><link rel="stylesheet" type="text/css"href="layui/css/layui.css" rel="external nofollow" media="all"></head><style>.panel {margin-bottom: 0;}i{cursor: pointer !important ;cursor: hand !important;}body{}a:hover{background-color:#E6E6E6 ;}.active{background:#E6E6E6;}.hide{display:none;}</style><body style="height:100%;"><div style="height:100%;"><div class="panel panel-default"style=" position:fixed; width: 250px; height:800px; overflow:auto;"><div class="panel-body" style=" "><h4 style="text-align: center;">分类管理</h4><ul unselectable="on" id="demo"style="margin-top: 30px; -moz-user-select: none; -webkit-user-select: none;"onselectstart="return false;" ></ul><button id="addcate" class="layui-btn layui-btn-primary" style="margin-top:20px; margin-left:28px; width:70%;">添加分类</button></div></div></div><script type="text/javascript" src="layui/layui.js"></script><script type="text/javascript">e(['jquery','layer','element','form','tree'],function(){window.jQuery = window.$ = layui.jquery;yer = yer;var form = layui.form;var elem = layui.element;var topcateid=0; //为模拟顶级分类id⽤//初始化layer.treevar tree = layui.tree({elem: '#demo',nodes:[] //这⾥可以通过后台获取(如ThinkPHP框架则可以通过后台拼接好,再⽣成模板变量类似{$tree}就可以)});window.onload=function(){//删除layui-tree ⾃带的样式$("yui-tree-branch").remove();$("yui-tree-leaf").remove();//添加操作的图标(即⿏标划过时显⽰的添加,修改,删除的按钮组)$("ul#demo").find("a").after("<i class='layui-icon add select hide ' )'> </i>"+"<i class='layui-icon edit select hide'> </i>"+"<i class='layui-icon del select hide'> </i>");}//添加顶级分类$("#addcate").on("click",function(){layer.prompt({title: '输⼊分类名称,并确认', formType:0}, function(text, index){layer.close(index);//TODO 可以ajax到后台操作,这⾥只做模拟layer.load(2);setTimeout(function(){layer.closeAll("loading");//⼿动添加节点,肯定有更好的⽅法=.=!这⾥的⽅法感觉有点LOW// li⾥⾯的pid属性为⽗级类⽬的id,顶级分类的pid为0topcateid= topcateid+1;$("ul#demo").append("<li pid='0' id="+(topcateid)+">"+"<a ><cite>"+text+"</cite> </a>"+"<i class='layui-icon select hide add'> </i>"+"<i class='layui-icon edit select hide'> </i>"+"<i class='layui-icon del select hide'> </i>"+"</li>");},1000)});})//显⽰/隐藏分类的操作栏$("ul#demo").on({mouseover: function(event) {event.stopPropagation();$(this).children(".select").removeClass("hide")},mouseout: function(event) {event.stopPropagation();$(this).children(".select").addClass("hide")},},"li","a")//添加⼦分类$("ul#demo ").on("click","li .add",function(){var pid = $(this).closest("li").attr("id");//将⽗级类⽬的id作为⽗类idvar that= $(this).closest("li");layer.prompt({title: '输⼊⼦分类名称,并确认', formType:0}, function(text, index){layer.close(index);//TODO 可以ajax到后台操作,这⾥只做模拟layer.load(2);setTimeout(function(){layer.closeAll("loading");topcateid= topcateid+1;if(that.children("ul").length == 0){//表⽰要新增 i 以及 ul 标签that.prepend('<i class="layui-icon layui-tree-spread"> </i>')that.append("<ul class='layui-show'><li pid="+pid+" id="+(topcateid)+"><a ><cite>"+text+"</cite> </a><i class='layui-icon select hide add' )'> </i> <i class='layui-icon edit select hide'> </i> <i class='layui-icon del select hide'> </i></li></ul>") }else{that.children("ul").append("<li pid="+pid+" id="+(topcateid)+"><a ><cite>"+text+"</cite> </a><i class='layui-icon select hide add' )'> </i> <i class='layui-icon edit select hide'> </i> <i class='layui-icon del select hide'> </i></li>");}},1000)});})//重命名$("ul#demo ").on("click","li .edit",function(){var node=$(this).parent().children("a").children("cite");var id=$(this).parent().attr("id")var that= $(this).closest("li");layer.prompt({title: '输⼊新的分类名称,并确认',value:node.text(), formType:0}, function(text, index){layer.close(index);//TODO 可以ajax到后台操作,这⾥只做模拟layer.load(2);setTimeout(function(){layer.closeAll("loading");node.text(text);},1000)});})//删除分类$("ul#demo ").on("click","li .del",function(){var that= $(this).closest("li");if(that.children("ul").length > 0){layer.msg("该分类下含有⼦分类不能删除")return;}var id=$(this).parent().attr("id")layer.confirm('确定要删除?该分类下的课程亦将删除!', {btn: ['删除','取消']}, function(){//TODO 可以ajax到后台操作,这⾥只做模拟layer.load(2);setTimeout(function(){layer.closeAll("loading");if((that.parent("ul").children("li").length == 1)&&(that.parent("ul").parent("li").children("yui-tree-spread").length=1)){//要把分类名前的三⾓符号和ul标签删除that.parent("ul").parent("li").children("yui-tree-spread").remove();}that.remove()},1000)});})//打开/关闭菜单$("ul#demo").on({click:function(event){event.stopPropagation();event.preventDefault();if( $(this).parent().children("ul").hasClass("layui-show")){$(this).html(" ");$(this).parent().children("ul").removeClass("layui-show");return;}else{$(this).html(" ");$(this).parent().children("ul").addClass("layui-show");return;}return;}}, 'yui-tree-spread');});</script></body></html>以上这篇layui-tree实现Ajax异步请求后动态添加节点的⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
Zepto是一个轻量级的JavaScript库,它的API和jQuery非常相似,用于在现代浏览器上实现快速的DOM 操作和Ajax请求。
在Zepto中发送异步Ajax请求的基本步骤如下:引入Zepto库:首先,你需要在你的HTML文件中引入Zepto库。
你可以从Zepto的官方网站下载库文件,然后在你的HTML文件中使用<script>标签引入。
html复制代码<script src="path/to/zepto.min.js"></script>创建Ajax请求:使用Zepto的$.ajax()方法来创建异步Ajax请求。
这个方法接受一个包含请求设置的对象作为参数。
javascript复制代码$.ajax({url: 'your/api/url', // 请求的URLtype: 'GET', // 请求方法,可以是'GET'、'POST'等dataType: 'json', // 期望的返回数据类型success: function(data) {// 请求成功时的回调函数console.log(data);},error: function(error) {// 请求失败时的回调函数console.error(error);}});1.处理响应:在success回调函数中处理服务器返回的响应数据。
在上面的例子中,我们简单地将数据打印到控制台。
2.处理错误:在error回调函数中处理请求失败的情况。
你可以在这里添加一些错误处理的逻辑。
除了$.ajax()方法,Zepto还提供了其他一些简化Ajax请求的方法,如$.get()、$.post()等。
这些方法的使用方式和$.ajax()类似,但更加简洁。
例如,使用$.get()方法发送一个GET请求:javascript复制代码$.get('your/api/url', function(data) {console.log(data);});或者,使用$.post()方法发送一个POST请求:javascript复制代码$.post('your/api/url', { key1: 'value1', key2: 'value2' }, function(data) {console.log(data);});这些简化方法会自动设置请求的类型和回调函数,让代码更加简洁易读。
layui中ajax的用法Layui是一款轻量级的前端UI框架,它以简洁、易用的设计风格受到广泛关注。
在Layui中,ajax是一种常用的数据交互方式,它可以让网页与后端服务器进行通信,获取或提交数据。
本文将详细介绍Layui中ajax的用法。
一、ajax概述ajax的全称是AsynchronousJavaScriptandXML(异步的JavaScript和XML),它是一种使用JavaScript和XML来与服务器进行通信的技术。
通过ajax,网页可以异步地向服务器请求数据,并在不刷新页面的情况下更新网页的内容。
这种技术可以大大提高网页的交互性和用户体验。
在Layui中,ajax的使用方法与其他JavaScript框架类似,主要包括以下步骤:1.引入Layui的ajax模块首先,需要在HTML文件中引入Layui的ajax模块,以便可以使用其中的功能。
可以在HTML文件的头部引入以下代码:<scriptsrc="/path/to/layui/layui.js"></script>2.创建ajax请求使用Layui的ajax模块,可以很方便地创建ajax请求。
可以使用以下代码创建一个GET请求:e('ajax',function(){varajax=layui.ajax;ajax.get({url:'/path/to/api',//后端服务器的API地址{//发送给服务器的数据key1:value1,key2:value2},success:function(response){//请求成功的回调函数console.log(response);//打印服务器的响应数据},error:function(error){//请求失败的回调函数console.log(error);//打印错误信息}});});3.处理服务器响应当ajax请求成功时,服务器会返回响应数据。
JQUERY AJAX异步操作详细说明AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和XML)。
它并非一种新的技术,而是以下几种原有技术的结合体。
1)使用CSS和XHTML来表示。
2)使用DOM模型来交互和动态显示。
3)使用XMLHttpRequest来和服务器进行异步通信。
4)使用javascript来绑定和调用。
通过AJAX异步技术,可以在客户端脚本与web服务器交互数据的过程中使用XMLHttpRequest对象来完成HTTP请求(Request)/应答(Response)模型:1)不需要用户等待服务端响应。
在异步派发XMLHttpRequest请求后控制权马上就被返回到浏览器。
界面不会出现白板,在得到服务器响应之前还可以友好的给出一个加载提示。
2)不需要重新加载整个页面。
为XMLHttpRequest注册一个回调函数,待服务器响应到达时,触发回调函数,并且传递所需的少量数据。
“按需取数据”也降低了服务器的压力。
3)不需要使用隐藏或内嵌的框架。
在XHR对象之前,模拟Ajax通信通常使用hack手段,如使用隐藏的或内嵌的框架(<iframe>标签)。
下面介绍下AJAX中的重要对象:XMLHttpRequest。
XMLHttpRequest对象(XHR)XMLHttpRequest是一套可以在Javascript、VbScript、Jscript等脚本语言中通过http协议传送或接收XML及其他数据的一套API。
XMLHttpRequest对象首次以ActiveX对象形式在微软Internet Explorer(IE) 5中以引入。
其他浏览器制造商在认识到这一对象重要性后也纷纷实现了XMLHttpRequest对象,但是以一个本地JavaScript对象而不是作为一个ActiveX 对象实现。
而如今,由于安全性、标准等问题,微软已经在其IE 7中把XMLHttpRequest实现为一个本地JavaScript对象。
layui实现数据表格table分页功能(ajax异步)layui实现数据表格table分页功能,异步加载,表格渲染,含条件查询。
⼀、引⼊layUI的相关资源<link rel="stylesheet" href="${ctxPath}/vendor/layui/css/layui.css" ><script src="${ctxPath}/vender/layui/layui.js" charset="utf-8"></script>⼆、html页⾯代码搜索表单:<div class="layui-row"><form class="layui-form layui-col-md12 we-search">项⽬搜索:<div class="layui-inline"><input type="text" name="projectName" id="projectName" placeholder="项⽬名称" autocomplete="off" class="layui-input"></div><div class="layui-input-inline"><select name="businessOperatorId" id="businessOperatorId" lay-verify="" lay-search><option value="">业务员</option></select></div><div class="layui-input-inline"><select name="mftRepresentativeId" id="mftRepresentativeId" lay-verify="" lay-search><option value="">⼚家代表</option></select></div><div class="layui-input-inline"><select name="channelId" id="channelId" lay-search><option value="">渠道</option></select></div><div class="layui-input-inline"><select name="customerId" id="customerId" lay-search><option value="">客户</option></select></div><div class="layui-input-inline"><select name="projectPhase" id="projectPhase" lay-search><option value="">项⽬阶段</option></select></div><div class="layui-input-inline"><select name="goodsCondition" id="goodsCondition" lay-search><option value="">货物情况</option></select></div><div class="layui-input-inline"><select name="implementCondition" id="implementCondition" lay-search><option value="">实施情况</option></select></div><div class="layui-input-inline"><select name="payCondition" id="payCondition" lay-search><option value="">收款情况</option></select></div><div class="layui-inline"><input class="layui-input" placeholder="开项时间" name="startTime" id="startTime"></div><div class="layui-inline"><input class="layui-input" placeholder="结项时间" name="endTime" id="endTime"></div><button class="layui-btn" lay-submit="" lay-filter="sreach"><i class="layui-icon"></i></button></form></div>数据表格:<table class="layui-hide" id="projectList" lay-filter="projectList"></table>三、后台接收分页参数以及查询条件,获取并返回数据主要注意下:page: 前台分页插件传⼊的当前页数,limit: 前台分页插件传⼊的每页个数,projectInfo :接收前台传⼊的查询条件的实体jsonResult :后台返回的相关数据的响应实体@ResponseBody@RequestMapping("/project/list")public JsonResult list(@RequestParam("page") Integer page, @RequestParam("limit") Integer size, ProjectInfoEntity projectInfo){ JsonResult jsonResult = projectService.getProjectList(page,size,projectInfo);return jsonResult;}后台响应类必须包含code与count字段,因为前台layui会⾃动获取⾃定义后台数据响应实体 JsonResult:package mon.util;/*** JSON结果响应**/@Datapublic class JsonResult {private static final String SUCCESS = "成功";private static final String ERROR = "失败";/*** 响应状态code,因为前台layui默认0为响应成功,所以此处默认为0*/private Integer code = 0;/*** 数据总条数*/private Long count = 0L;/*** 返回是否成功*/private Boolean result = false;/*** 返回提⽰信息*/private String msg = "";/*** 返回数据信息*/private Object data;private JsonResult() {}/*** 成功的响应** @return*/public static JsonResult success() {return result(true, SUCCESS, null,null);}public static JsonResult success(String msg) {return result(true, msg, null,null);}public static JsonResult success(Object data) {return result(true, SUCCESS, data,null);}public static JsonResult success(Object data,Long count) {return result(true, SUCCESS, data,count);}public static JsonResult success(String msg, Object data) {return result(true, msg, data,null);}public static JsonResult success(String msg, Object data,Long count) {return result(true, msg, data,count);}/*** 失败的响应** @return*/public static JsonResult error() {return result(false, ERROR, null,null);}public static JsonResult error(String msg) {return result(false, msg, null,null);}public static JsonResult error(Object data) {return result(false, ERROR, data,null);}public static JsonResult error(Object data,Long count) {return result(false, ERROR, data,count);}public static JsonResult error(String msg, Object data) {return result(false, msg, data,null);}public static JsonResult error(String msg, Object data,Long count) {return result(false, msg, data,count);}public static JsonResult result(Boolean result, String msg, Object data,Long count) { JsonResult jsonResult = new JsonResult();jsonResult.setResult(result);jsonResult.setMsg(msg);jsonResult.setData(data);jsonResult.setCount(count);return jsonResult;}}四、渲染table表格数据主要注意下:elem: ‘#projectList': projectList为表格id,page: true: 设置表格分页,url: ‘/project/list' :数据请求urlfixed: true:固定列done : function(res, curr, count){…}:数据加载成功后的回调函数var tableIns = table.render({elem: '#projectList',cellMinWidth: 150,url: '/project/list',cols: [[{// type: 'checkbox',fixed: 'left'checkbox: true, fixed: true}, {field: 'id',title: 'ID',align:'center',width:50,fixed: true}, {field: 'name',title: '项⽬名称',align:'center',fixed: true}, {field: 'businessOperatorStr',title: '经办⼈',align:'center',fixed: true}, {field: 'mftRepresentativeStr',title: '⼚家代表',align:'center',fixed: true}, {field: 'channelStr',title: '渠道',align:'center',fixed: true}, {field: 'customerStr',title: '客户',align:'center',fixed: true}, {field: 'projectPhaseStr',title: '项⽬阶段',align:'center',fixed: true}, {field: 'amount',title: '⾦额',align:'center'}, {field: 'businessSource',title: '商机来源',align:'center'}, {field: 'mainProduct',title: '主要产品',align:'center'}, {field: 'productLineStr',title: '产品线',align:'center'}, {field: 'goodsConditionStr',title: '货物情况',align:'center'}, {field: 'implementConditionStr',title: '实施情况',align:'center'}, {field: 'payAmount',title: '已付⾦额',align:'center'}, {field: 'payConditionStr',title: '收款情况',align:'center'}, {field: 'startTime',title: '开项时间',align:'center'}, {field: 'endTime',title: '结项时间',align:'center'}, {field: 'remark',title: '备注',align:'center'}, {field: 'operate',title: '操作',toolbar: '#operateTpl',fixed: 'right',unresize: true}]],id: 'testReload',// skin: 'row', //表格风格even: true, //隔⾏背景event: true,page: true,done : function(res, curr, count){$('#totalProjectNumber').text("共有数据:"+count+" 条");table_data=res.data;layer.closeAll('loading');// layer.close(layer.index); //它获取的始终是最新弹出的某个层,值是由layer内部动态递增计算的// layer.close(index); //返回数据关闭loading}});五、监听搜索表单的提交事件,并重新渲染table表格数据主要注意下:sreach: 为搜索按钮的lay-filter=“sreach”,where 中的数据对应搜索表单,为搜索的条件,后台使⽤这些条件进⾏筛选数据返回form.on('submit(sreach)', function(data){layer.load();tableIns.reload({url:"/project/list",page: {curr: 1 //重新从第 1 页开始},where:{name:data.field.projectName,businessOperatorId:data.field.businessOperatorId,mftRepresentativeId:data.field.mftRepresentativeId,channelId:data.field.channelId,customerId:data.field.customerId,projectPhase:data.field.projectPhase,goodsCondition:data.field.goodsCondition,implementCondition:data.field.implementCondition,payCondition:data.field.payCondition,startTime:data.field.startTime,endTime:data.field.endTime}});return false; //阻⽌表单跳转。
ajax async用法ajax async用法是指在使用ajax请求时,是否将请求设置为异步执行。
在ajax中,异步请求使得网页可以在请求发送给服务器之后继续进行其他操作,而不需要等待服务器响应。
这篇文章将一步一步回答关于ajax async 用法的问题。
第一步:什么是ajax?Ajax是一种网页开发技术,全称为“Asynchronous JavaScript and XML”(异步的JavaScript和XML)。
它允许网页通过JavaScript在后台与服务器进行通信,从而实现无需刷新整个页面的数据传输和交互。
使用ajax 可以改善用户体验,提高网页的性能和加载速度。
第二步:什么是异步请求?在web开发中,当一个请求被发送到服务器时,浏览器会停止处理其他的事务,直到服务器返回响应。
这种默认的同步请求方式会导致页面的加载和响应速度变慢。
异步请求是指将请求发送给服务器后,网页可以继续执行其他操作,并不需要等待服务器的响应。
第三步:如何设置异步请求?在ajax中,可以通过设置async参数为true或false来控制请求的异步性。
当参数为true时,请求为异步请求;当参数为false时,请求为同步请求。
默认情况下,async参数的值为true,即异步请求。
第四步:异步请求的优势是什么?异步请求具有以下几个优势:1. 提高用户体验:由于异步请求不需要等待服务器响应,网页可以继续进行其他操作。
用户可以在请求发送的同时继续浏览页面,不会感到页面的卡顿或等待。
2. 提高网页性能:异步请求可以减少页面加载时间,因为不需要等待服务器响应之后再加载其他内容。
网页可以在后台同时发送多个异步请求,从而提高网页的并发性能。
3. 节约带宽:由于不需要每次请求都加载整个页面,异步请求只传输需要的数据。
这可以节约带宽和服务器资源,并减轻服务器的负担。
第五步:异步请求的注意事项在使用异步请求时,需要注意以下几点:1. 异步请求的回调函数:异步请求需要设置回调函数来处理服务器的响应。
$.ajax使用方法$.ajax是jQuery中的一个方法,用于执行异步HTTP(Ajax)请求。
以下是$.ajax的基本使用方法:1.创建请求:```javascript$.ajax({url:"example.php",//请求的URL地址type:"GET",//请求方式,GET或POST dataType:"json",//预期服务器返回的数据类型,可以是xml、json、script、html等success:function(data){//请求成功后的回调函数console.log(data);//输出服务器返回的数据},error:function(){//请求失败时的回调函数console.log("请求失败");}});```2.发送数据:```javascript$.ajax({url:"example.php",type:"POST",data:{foo:"bar"},//要发送到服务器的数据,以键值对的形式表示dataType:"json",success:function(data){console.log(data);},error:function(){console.log("请求失败");}});```3.处理服务器响应:在成功回调函数中,服务器返回的数据作为参数传递给回调函数。
可以根据需要处理这些数据,例如更新页面内容或执行其他操作。
4.配置选项:$.ajax方法接受一个配置对象作为参数,其中包含以下选项:-`url`:请求的URL地址。
-`type`:请求方式,默认为"GET"。
-`dataType`:预期服务器返回的数据类型,默认为"html"。
ajax 调用方法Ajax调用方法详解Ajax(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术,它通过在后台与服务器进行少量数据交换,实现了网页无需刷新即可更新部分内容的功能。
在前端开发中,Ajax的应用非常广泛,本文将详细介绍几种常见的Ajax调用方法。
一、XMLHttpRequest对象XMLHttpRequest是Ajax的核心对象,它用于与服务器进行数据交互。
通过创建XMLHttpRequest对象并调用其相关方法,可以实现异步加载数据、发送数据到服务器等操作。
创建XMLHttpRequest对象的方法如下:```javascriptvar xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest(); // 非IE浏览器} else if (window.ActiveXObject) {xhr = new ActiveXObject('Microsoft.XMLHTTP'); // IE浏览器}```使用XMLHttpRequest对象发送GET请求的方法如下:```javascriptxhr.open('GET', 'data.php?param1=value1¶m2=value2', true);xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {var response = xhr.responseText;// 处理服务器返回的数据}};xhr.send();```使用XMLHttpRequest对象发送POST请求的方法如下:```javascriptxhr.open('POST', 'data.php', true);xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {var response = xhr.responseText;// 处理服务器返回的数据};xhr.send('param1=value1¶m2=value2');```二、jQuery的Ajax方法jQuery是一款功能强大的JavaScript库,它封装了许多常用的操作,包括Ajax。
Web前端开发实训案例教程初级AJAX异步请求与数据交互在Web前端开发中,实现异步请求和数据交互是一个非常重要的技能。
AJAX(Asynchronous JavaScript and XML)是一种用于在Web应用程序中向服务器发送和接收数据的技术,它可以实现页面的无刷新更新,提升用户体验。
本文将介绍初级AJAX异步请求和数据交互的案例教程。
一、AJAX基础知识概述AJAX使用JavaScript和XML来实现异步数据交互。
在传统的Web 开发中,页面的更新通常需要重新加载整个页面,这对于用户体验来说是一个很大的缺点。
而AJAX可以通过局部更新页面的方式,只重新加载需要变化的部分,从而提升用户的交互体验。
AJAX的基本原理是通过XMLHttpRequest对象向服务器发送异步请求,然后在服务器返回数据后再进行页面的更新。
在实际开发中,可以使用现代的Web开发框架如jQuery等来简化AJAX的操作。
二、案例教程:实现实时搜索建议功能在本案例教程中,我们将展示如何使用AJAX实现一个实时搜索建议功能。
该功能可以在用户输入关键词时,实时向服务器发送请求获取匹配的搜索建议,并将结果显示在页面上。
1. 准备工作首先,我们需要准备一个用于接收搜索请求的后端API。
这个API 可以是一个简单的服务器接口,接收带有关键词参数的GET请求,并返回匹配的搜索建议结果。
2. 前端代码实现在HTML页面上,我们需要添加一个输入框和一个用于展示搜索建议的区域。
用户输入关键词时,将触发一个JavaScript函数,该函数将使用AJAX向后端API发送请求,并将返回的结果渲染到页面上。
以下是一个简单的示例代码:```html<input type="text" id="keyword" onkeyup="getSuggestions()"><ul id="suggestions"></ul><script>function getSuggestions() {var keyword = document.getElementById("keyword").value;var url = "/api/suggestions?keyword=" + keyword;// 创建XMLHttpRequest对象var xmlhttp = new XMLHttpRequest();xmlhttp.onreadystatechange = function() {if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {var suggestions = JSON.parse(xmlhttp.responseText);var suggestionsList = document.getElementById("suggestions");suggestionsList.innerHTML = "";// 渲染搜索建议for (var i = 0; i < suggestions.length; i++) {var li = document.createElement("li");li.appendChild(document.createTextNode(suggestions[i]));suggestionsList.appendChild(li);}}};// 发送AJAX请求xmlhttp.open("GET", url, true);xmlhttp.send();}</script>```以上代码使用了原生的JavaScript来实现AJAX请求和数据的更新。
JSP Ajax Dojo异步调用
Dojo框架是一个基于客户端的Ajax框架,故Dojo对象封装的都是客户端的一些代码。
在使用Dojo框架进行异步调用时,只需要注意其客户端的Dojo对象就可以了,服务器端代码的执行和前面章节一样。
在本节中,将以案例的形式介绍Doj o的异步调用。
现在创建一个案例,演示Dojo框架进行异步调用。
首先创建服务器端代码,打开记事本,输入下列代码:
将上述代码保存,名称为Example3.jsp。
在该文件中,语句dojo.addOnLoad(he llo)表示在加载页面时执行hello函数。
Ajax异步调用功能的实现都是在函数hello 中执行的。
首先在文件顶部引入Dojo框架。
然后在hello()函数中,调用dojo对象的xhrGet()方法主要完成向服务器端发送请求,并调用回调函数。
在该方法中,设定服务端的URL路径,文件类型、超时时间和回调函数。
该回调函数是一个匿名函数,在匿名函数中,将返回的信息赋值给层cargo。
打开IE浏览器,在地址栏中输入http://localhost:8080/DojoExample/Example3.js p,单击转到,会显示如图10-11所示窗口:
图10-11 Dojo框架异步调用。