-
AJAX Live Search在下面的实例中,我们将演示一个实时的搜索,在您键入数据的同时即可得到搜索结果。实时的搜索与传统的搜索相比,具有很多优势:当键入数据时,就会显示出匹配的结果当继续键入数据时,对结果进行过滤如果结果太少,删除字符就可以获得更宽的范围在下面的文本框中输入 "HTML",搜索包含 HTML 的页面:上面实例中的结果在一个 XML 文件(links.xml)中进行查找。为了让这个例子小而简单,我们只提供 6 个结果。实例解释 - HTML 页面当用户在上面的输入框中键入字符时,会执行 "showResult()" 函数。该函数由 "onkeyup" 事件触发:<html><head><script>function showResult(str){ if (str.length==0) { document.getElementById("livesearch").innerHTML=""; document.getElementById("livesearch").style.border="0px"; return; } if (window.XMLHttpRequest) {// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行 xmlhttp=new XMLHttpRequest(); } else {// IE6, IE5 浏览器执行 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("livesearch").innerHTML=xmlhttp.responseText; document.getElementById("livesearch").style.border="1px solid #A5ACB2"; } } xmlhttp.open("GET","livesearch.php?q="+str,true); xmlhttp.send();}</script></head><body><form><input type="text" size="30" onkeyup="showResult(this.value)"><div id="livesearch"></div></form></body></html>源代码解释:如果输入框是空的(str.length==0),该函数会清空 livesearch 占位符的内容,并退出该函数。如果输入框不是空的,那么 showResult() 会执行以下步骤:创建 XMLHttpRequest 对象创建在服务器响应就绪时执行的函数向服务器上的文件发送请求请注意添加到 URL 末端的参数(q)(包含输入框的内容)PHP 文件上面这段通过 JavaScript 调用的服务器页面是名为 "livesearch.php" 的 PHP 文件。"livesearch.php" 中的源代码会搜索 XML 文件中匹配搜索字符串的标题,并返回结果:<?php$xmlDoc=new DOMDocument();$xmlDoc->load("links.xml");$x=$xmlDoc->getElementsByTagName('link');// 从 URL 中获取参数 q 的值$q=$_GET["q"];// 如果 q 参数存在则从 xml 文件中查找数据if (strlen($q)>0){ $hint=""; for($i=0; $i<($x->length); $i++) { $y=$x->item($i)->getElementsByTagName('title'); $z=$x->item($i)->getElementsByTagName('url'); if ($y->item(0)->nodeType==1) { // 找到匹配搜索的链接 if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) { if ($hint=="") { $hint="<a href='" . $z->item(0)->childNodes->item(0)->nodeValue . "' target='_blank'>" . $y->item(0)->childNodes->item(0)->nodeValue . "</a>"; } else { $hint=$hint . "<br /><a href='" . $z->item(0)->childNodes->item(0)->nodeValue . "' target='_blank'>" . $y->item(0)->childNodes->item(0)->nodeValue . "</a>"; } } } }}// 如果没找到则返回 "no suggestion"if ($hint==""){ $response="no suggestion";}else{ $response=$hint;}// 输出结果echo $response;?>
-
实例解释 - HTML 页面当用户在上面的输入框中键入字符时,会执行 "showHint()" 函数。该函数由 "onkeyup" 事件触发:<html><head><script>function showHint(str){ if (str.length==0) { document.getElementById("txtHint").innerHTML=""; return; } if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行的代码 xmlhttp=new XMLHttpRequest(); } else { //IE6, IE5 浏览器执行的代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","gethint.php?q="+str,true); xmlhttp.send();}</script></head><body><p><b>在输入框中输入一个姓名:</b></p><form> 姓名: <input type="text" onkeyup="showHint(this.value)"></form><p>返回值: <span id="txtHint"></span></p></body></html>源代码解释:如果输入框是空的(str.length==0),该函数会清空 txtHint 占位符的内容,并退出该函数。如果输入框不是空的,那么 showHint() 会执行以下步骤:创建 XMLHttpRequest 对象创建在服务器响应就绪时执行的函数向服务器上的文件发送请求请注意添加到 URL 末端的参数(q)(包含输入框的内容)PHP 文件上面这段通过 JavaScript 调用的服务器页面是名为 "gethint.php" 的 PHP 文件。"gethint.php" 中的源代码会检查姓名数组,然后向浏览器返回对应的姓名:<?php// 将姓名填充到数组中$a[]="Anna";$a[]="Brittany";$a[]="Cinderella";$a[]="Diana";$a[]="Eva";$a[]="Fiona";$a[]="Gunda";$a[]="Hege";$a[]="Inga";$a[]="Johanna";$a[]="Kitty";$a[]="Linda";$a[]="Nina";$a[]="Ophelia";$a[]="Petunia";$a[]="Amanda";$a[]="Raquel";$a[]="Cindy";$a[]="Doris";$a[]="Eve";$a[]="Evita";$a[]="Sunniva";$a[]="Tove";$a[]="Unni";$a[]="Violet";$a[]="Liza";$a[]="Elizabeth";$a[]="Ellen";$a[]="Wenche";$a[]="Vicky";//从请求URL地址中获取 q 参数$q=$_GET["q"];//查找是否由匹配值, 如果 q>0if (strlen($q) > 0){ $hint=""; for($i=0; $i<count($a); $i++) { if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q)))) { if ($hint=="") { $hint=$a[$i];
-
ajax如何实现页面的局部加载,具体如下点击头部即右上角的链接时,页面会根据相应的链接加载新的内容,显示在下方;在中间区域有3栏,当点击1栏中的链接,2栏中会显现相应的内容,点击2栏中的内容,3栏中的内容又会根据2栏的链接来加载显示内容。页面效果如下:js代码如下:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576$("header a").on("click",function(e){ e.preventDefault(); //阻止事件默认行为 var href = this.href; //记录要加载页面的链接 //更新当前连接状态 $("header a").removeClass("current"); $(this).addClass("current"); var $content = $("#content"); var $container = $("#container"); $container.remove(); $content.load(href + " #container"); //加载页面id = container的内容 }); var times; //times用来存储所有活动的环节时间表 $.ajax({ type:"get", //指定get方式 url:"example.json", async:true, beforeSend: function(jqXHR){ //在浏览器请求JSON数据之前,脚本会检查浏览器是否支持overrideMineType()方法。 //该方法会用来告知服务器应当返回JSON数据。 //当服务器意外配置成返回其他格式的数据时,就可以使用这个方法了 if(jqXHR.overrideMimeType){ jqXHR.overrideMimeType("application/json"); } } }); function loadTimeTable(){//加载example.json文件中加载时间表的数据 $.getJSON( "example.json" ).done(function(data){ //加载成功,值被保存到times中 //console.log(data); times = data; }).fail(function(){ //加载失败 $("#event").html("Sorry!we could not load the timetable at the moment"); }); } loadTimeTable(); //调用函数 //点击活动名称,将该活动的时间加载到中栏 $("#content").on("click","#event a",function(e){ e.preventDefault(); var loc = this.id.toUpperCase(); //保存活动位置的名称 var newContent = ''; //设置展示样式排版 for(var i = 0; i < times[loc].length; i++){ //alert(times[loc][i].time); newContent += '<li><span class="time">' +times[loc][i].time +'</span>'; newContent += '<a href="descriptions.html#" rel="external nofollow" title="' +times[loc][i].title.replace(/ /g,'-')+ '">'; newContent += times[loc][i].title + '</a></li>'; } $("#sessions").html('<ul>'+newContent+'</ul>'); $("#event a").removeClass("current"); //更新活动链接的class属性,借此凸显当前活动 $(this).addClass("current"); $("#details").text(''); //如果第三栏中包含内容,就清空它 }); //点击中栏中的环节是产生相应,它会加载环节的描述信息 $("#content").on("click","#sessions a",function(e){ e.preventDefault(); var fragment = this.href.replace('#',' #'); //更新当前连接状态 $("#details a").removeClass("current"); $(this).addClass("current"); $("#details").load(fragment+this.title); //查找到descriptions.html页面中id对应的部分加载到当前页面 });
-
如何封装Ajax函数 一个Ajax函数: 一个Ajax函数 var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest; }else{ xhr = new ActiveXObject("Microsoft.XMLHTTP"); } xhr.open("GET","https://jsonplaceholder.typicode.com/users"); xhr.send(null); xhr.onreadystatechange = function(){ if(this.readyState === 4){ console.log(xhr.responseText) } } 封装自己的 Ajax 函数 参数1:{string} 请求方法--method 参数2:{string} 请求地址--url 参数3:{object} 请求参数--params 参数4:{function} 请求完成后,执行的回调函数--done function ajax(method,url,params,done){ 统一将method方法中的字母转成大写,后面判断GET方法时 就简单点 method = method.toUpperCase(); IE6的兼容 var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); 创建打开一个连接 open 将对象格式的参数转为urlencoded模式 新建一个数组,使用for循环,将对象格式的参数, 以(id = 1)的形式,每一个键值对用 & 符号连接 var pairs = []; for(var k in params){ pairs.push(k + "=" + params[k]); } var str = pairs.join("&"); //判断是否是get方法 , get方法的话,需要更改url的值 if(method == "GET"){ url += "?" + str; } 创建打开一个连接 xhr.open(method,url); var data = null; if(method == "POST"){ //post方法 还需要设置请求头、请求体 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); data = str; } xhr.send(data); 执行回调函数 xhr.onreadystatechange = function(){ if(this.readyState == 4) { done(JSON.parse(this.responseText)); }return; 执行外部传进来的回调函数即可 需要用到响应体 } } 调用函数 get方法 ajax("GET","http://localhost:3000/users", {"id":1}, function(data){ console.log(data); }); post方法 ajax("POST", "http://localhost:3000/users", { "name": "lucky","class":2,"age":20 }, function (data) { console.log(data);
-
功能说明当用户在注册页面输入用户名并且鼠标焦点离开输入框时,到数据表中去验证该用户名是否已经存在,如果存在提示不可用,否则,提示可用。接口123public interface UserDao { public User findName(String name);}接口实现类12345678910111213141516171819202122232425262728import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException; public class UserDaoImpl implements UserDao { @Override public User findName(String name) { User user =null; Connection conn = DBHelper.getConn(); String sql = "select * from user where name=?"; try { PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1,name); ResultSet rs = ps.executeQuery(); if (rs.next()){ user = new User(); user.setId(rs.getInt(1)); user.setName(rs.getString(2)); user.setPassword(rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } return user; }}servlet1234567891011121314151617181920212223242526import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException; @WebServlet("/findName")public class FindNameServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); String name = request.getParameter("name"); UserDao userDao = new UserDaoImpl(); User name1 = userDao.findName(name); if (name1!=null){ response.getWriter().write("1"); }else { response.getWriter().write("2"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); }}JSP页面123456789101112131415161718192021222324252627282930313233<%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>AJAX实际操作注册验证用户名</title> <script src="js/jquery-1.8.3.js"></script> </head> <body> <form action="#" method="post"> <script type="text/javascript"> $(function () { $("[name=userName]").blur(function () { $.ajax({ type:"get", url:"findName?name="+$("[name=userName]").val(), dataType:"text", success:function (data) { //alert(data); if (data=="1"){ $("#show").html("用户已存在!!!") }else { $("#show").html("用户名可用") } } }) }) }); </script> 账号<input type="text" name="userName"><span id="show"></span></br> 密码<input type="password" name="password"></br> <input type="submit" value="提交"> </form> </body></html>
-
实现效果前言:在百度贴吧,以及一些论坛中,当你回复或者评论完毕之后,从来没有见过页面重新刷新加载的效果,那么这个究竟是怎么做成的呢,也就是利用Ajax技术,页面无刷新效果,废话不多说,直接上代码。html部分:123456789101112131415161718<div class="container"> <h1 class="display-1">留言板</h1> <hr> <div id="loading">正在拼命加载数据.....</div> <ul id="messages" class="list-unstyled"> </ul> <hr> <div class="form-group"> <label for="txt_name">称呼:</label> <input class="form-control" id="txt_name" name="xxx" type="text"> </div> <div class="form-group"> <label for="txt_content">留言:</label> <textarea class="form-control" id="txt_content" cols="80" rows="10"></textarea> </div> <button type="button" id="btn_send" class="btn btn-primary">提交</button></div>css部分:css部分引用了bootstrap.cssjs部分:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788//———————————实现页面初始化数据 Start———————————<script> //初始化,加载数据 loadData(); //获取已经存在的数据,加载到页面中 /* 方式:GET 方法名: /getMsg 参数:无 返回: 所有留言[JSON] */ function loadData() { //1.新建xhr 对象 var xhr = new XMLHttpRequest(); //2.设置请求参数和url xhr.open('GET', '/getMsg'); //3.调用send方法 发送请求 xhr.send(); //4.接收一个参数 返回服务器的响应结构 xhr.onload = function () { //JSON转换成数组 var arr = JSON.parse(this.response); //开始遍历数组 var str = ''; arr.forEach(function (ele) { //将循环遍历出来的拼接到到一个字符串中, str += `<li class="media"> <img class="mr-3" src="avatar.png" alt=${ele.name}> <div class="media-body"> <h4>${ele.name}</h4> <p>${ele.content}</p> </div> </li>`; }); //获取ul 将拼接的li 放置到ul 中 var mes = document.getElementById('messages'); mes.innerHTML = str; //清空默认显示 拼命加载中 if (mes.childNodes.length != 0) { //获取拼命加载中id var loadMes = document.getElementById('loading'); loadMes.innerHTML = ""; } } } </script> //————————————实现页面初始化数据 end———————— //————————实现页面添加留言功能 Start—————————— <script> //添加一个发表留言的功能 /* 方式:POST 方法名:/addMsg 参数:name[string] content:[string] 返回值:添加成功:true 添加失败:false */ //新增的方法 //获取提交按钮 var btn_send = document.getElementById("btn_send"); btn_send.onclick = function () { //1.新建xhr 对象 var xhr = new XMLHttpRequest(); //2.设置请求参数和url xhr.open('POST', '/addMsg'); //3.设置请求头 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //获取称呼内容 var txt_name = document.getElementById("txt_name"); //获取留言内容 var txt_content = document.getElementById("txt_content"); //4.调用send方法 发送请求 xhr.send('name=' + txt_name.value + '&content= ' + txt_content.value); //5.接收一个参数 返回服务器的响应结构 xhr.onload = function () { if (this.response === "true") { //添加完毕之后,重新加载 loadData(); //添加完毕之后清空输入栏文本 txt_name.value = txt_content.value = ''; } else { alert("添加失败"); } } } </script> //——————————实现页面添加留言功能 end————————————
-
前端编程中的AJAX服务器 什么是服务器:咱们的页面来源于服务器;实例(在phpnwo上面存放一个页面), 咱们把页面放在互联网的服务器上,就有了自己的网站了。 1.异步同步 生活中的同步: 生活中的异步: 在JavaScript语言中,同步和异步的概念刚好相反。 这JavaScript中同步就是:你不执行完上面的代码,那么下面的代码你就别执行;一步一步执行,这就是同步。 异步就是可以一块执行的代码; 进程的概念 进程≠程序 程序从开始到结束的一次执行过程叫做进程 一个进程当中,程序同时运行的多个分支,叫做线程 多线程异步执行,可以提高程序的效率 AJAX的重要性 在许多数企业看来AJAX的使用熟练程度 === 你的工作经验。 2.什么是AJAX ajax是前后端数据交互的重要手段 Ajax 全称为:“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML), 它并不是 JavaScript 的一种单一技术,而是利用了一系列交互式网页应用相关的技术所形 成的结合体。使用 Ajax,我们可以无刷新状态更新页面,并且实现异步提交,提升了用户体验。 一.Ajax 概述 Ajax 这个概念是由 JesseJamesGarrett 在 2005 年发明的。它本身不是单一技术,是一串 技术的集合,主要有: 1.JavaScript,通过用户或其他与浏览器相关事件捕获交互行为 2.XMLHttpRequest 对象,通过这个对象可以在不中断其它浏览器任务的情况下向服务 器发送请求; 3.服务器上的文件,以 XML、HTML 或 JSON 格式保存文本数据; 4.其它 JavaScript,解释来自服务器的数据(比如 PHP 从 MySQL 获取的数据)并将其 呈现到页面上。 由于 Ajax 包含众多特性,优势与不足也非常明显。优势主要以下几点: 1.不需要插件支持(一般浏览器且默认开启 JavaScript 即可); 2.用户体验极佳(不刷新页面即可获取可更新的数据); 3.提升 Web 程序的性能(在传递数据方面做到按需放松,不必整体提交); 4.减轻服务器和带宽的负担(将服务器的一些操作转移到客户端); 而 Ajax 的不足由以下几点: 1.不同版本的浏览器度 XMLHttpRequest 对象支持度不足(比如 IE5 之前); 2.前进、后退的功能被破坏(因为 Ajax 永远在当前页,不会几率前后页面); 3.搜索引擎的支持度不够(因为搜索引擎爬虫还不能理解 JS 引起变化数据的内容); 4.开发调试工具缺乏(相对于其他语言的工具集来说,JS 或 Ajax 调试开发少的可怜) 。 3.AJAX的使用 电话的接打顺序: 1.首先要有一个电话; 2.拨号; 3.说话; 4.听电话另一边的信息; //有一个电话:创建请求对象; 1.var AJAX=new XMLHttpRequest( ); //拨号:设置请求参数; 2.AJAX.open('get','data/test.json',true); 第一个参数:POST||GET POST和GET的区别 POST是发送数据,GET是接受数据; PSOT发送数据的安全性较好,而GET较差; POST发送数据不限制大小,而GET大小受限2~100k。 什么时候用GET和POST那:在数据获取时用GET方式,在操作数据时应使用POST方式。 第三个参数:当该boolean值为true时,服务器请求是异步进行的,也就是脚本执行send()方法后不等待 服务器的执行结果,而是继续执行脚本代码; 当该boolean值为false时,服务器请求是同步进行的,也就是脚本执行send()方法后等待 服务器的执行结果的返回,若在等待过程中超时,则不再等待,继续执行后面的脚本代码!3. ajax.onreadystatechange = function() { if (ajax.readyState == 4 && ajax.status == 200) { func_succ(ajax.responseText); } else { //alert("ajax faild readyState:"+ajax.readyState+" status:"+ajax.status); } };4.ajax.send(null); ajax.readyStatus 0 - (未初始化)还没有调用send()方法 1 - (载入)已调用send()方法,正在发送请求 2 - (载入完成)send()方法执行完成,已经接收到全部响应内容 3 - (交互)正在解析响应内容 4 - (完成)响应内容解析完成,可以在客户端调用了
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签