经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » jQuery » 查看文章
初涉Ajax
来源:cnblogs  作者:Plokit  时间:2021/2/1 11:56:09  对本文有异议

预备知识

  • JavaScript
  • 引入javaScript , < script >
  • 函数
  • 选择器
  • 标签选择器
  • 类选择器 .
  • id选择器 #
  • jQuery公式
  • $(选择器).事件(参数)
  • $(select).action(...)

Ajax

Ajax = Asynchronous Javascript And XML(异步 JavaScript 和 XML)Ajax
Ajax是一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
Ajax不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。
在2005年,Google通过其Google Suggest使得AJAX变得流行起来。
Google Suggest使用Ajax创造出动态性极强的web界面:当我们在搜索栏输入关键字的时候,JavaScript就会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表,和我们国内的百度的搜索栏一样。
传统的网页(即不用ajax技术的网页),想要更新内容或者提交一个表单,都需要重新加载整个网页。
使用ajax技术的网页,通过在后台服务器进行少量的数据交换,就可以实现异步局部更新。
使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面,增强B/S的体验性。
再提一下B/S:未来的主流,并且会爆发式的持续增长,以后我们的电脑可能只需要有一个浏览器即可。
现在的产品链就是H5+网页+客户端+手机端(Android,IOS)+小程序。
利用AJAX可以做:

  • 注册时,输入用户名自动检测用户是否已经存在。
  • 登陆时,提示用户名密码错误。
  • 删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。

我们可以使用前端的一个标签来伪造一个ajax的样子。iframe标签。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>伪造Ajax</title>
  6. </head>
  7. <body>
  8. <script type="text/javascript">
  9. function loadPage() {
  10. var targetURL = document.getElementById ('url').value;
  11. document.getElementById('iframePosition').src = targetURL;
  12. }
  13. </script>
  14. <div>
  15. <p>请输入要加载的地址:</p>
  16. <p>
  17. <input type="text" id="url" value="https://www.baidu.com/">
  18. <input type="button" value="提交" onclick="loadPage()">
  19. </p>
  20. </div>
  21. <div>
  22. <h3>加载页面的位置:</h3>
  23. <iframe style="width:100%; height:500px" id="iframePosition">
  24. </iframe>
  25. </div>
  26. </body>
  27. </html>

之后当我们点击提交后 效果如图:

但这也只是伪造的Ajax。
纯JS实现Ajax我们不去了解, 这里直接使用jquery提供的,更方便学习,避免重复造轮子,有兴趣的同学可以去了解下本质XMLHttpRequest
Ajax的核心是XMLHttpRequest对象(XHR)。XHR为向服务器发送请求和解析服务器响应提供了接口。能够以异步方式从服务器获取新数据。
jQuery提供多个与AJAX有关的方法。
通过jQuery AJAX方法,能够使用HTTP Get和HTTP Post 从远程服务器上请求文本、HTML、XML或JSON,同时能够把这些外部数据直接载入网页的被选元素中。
jQuery不是生产者,而是大自然搬运工。
jQuery Ajax本质就是XMLHttpRequest,对他进行了封装,方便调用!
我们看下它的方法:

  1. 1.jQuery.get (...)
  2. 所有参数:
  3. url:待载入页面的URL地址
  4. data:待发送 Key/value 参数。
  5. success:载入成功时回调函数
  6. dataType:返回内容格式,xml, json, script,text, html
  7. 2.jQuery.post(...)
  8. 所有参数:
  9. url:待载入页面的URL地址
  10. data:待发送 Key/value 参数
  11. success:载入成功时回调函数
  12. dataType:返回内容格式,xml, json, script, text,html
  13. 3.jQuery.getJSON(...)
  14. 所有参数:
  15. url:待载入页面的URL地址
  16. data:待发送Key/value参数
  17. success:载入成功时回调函数
  18. 4.jQuery.getscript (...)
  19. 所有参数:
  20. url:待载入页面的URL地址
  21. data:待发送Key/value 参数
  22. success:载入成功时回调函数
  23. 5.jQuery.ajax (...)
  24. 部分参数:
  25. url:请求地址
  26. type:请求方式,GETPOST (1.9.0之后用method)
  27. headers:请求头
  28. data:要发送的数据
  29. contentType:即将发送信息至服务器的内容编码类型
  30. async:是否异步
  31. timeout:设置请求超时时间(毫秒)
  32. beforeSend:发送请求前执行的函数(全局)
  33. complete:完成之后执行的回调函数(全局)
  34. success:成功之后执行的回调函数(全局)
  35. error:失败之后执行的回调函数(全局)
  36. accepts:通过请求头发送给服务器,告诉服务器当前客户端接收的数据类型
  37. dataType:将服务器端返回的数据转换成指定类型
  38. "xml":将服务器端返回的内容转换成xml格式
  39. "text":将服务器端返回的内容转换成普通文本格式
  40. "html":将服务器端返回的内容转换成普通文本格式,在插入DOM中时如果包含JavaScript标签,则会尝试去执行。
  41. "script":尝试将返回值当作Javascript去执行,然后再将服务器端返回的内容转换成普通文本格式
  42. "json":将服务器端返回的内容转换成相应的JavaScript对象
  43. "jsonp": JSONP格式使用JSONP 形式调用函数时,如“myurl? callback=?" jQuery 将自动替换?为正确的函数名,以执行回调函数
  44. //第5个里面我们最常用的还是url,data,success 其他的简单了解即可

使用jQuery需要先导入它的包,我们可以去到官网下载我们的jQuery库
之后我们可以在我们工程的webapp目录下新建一个statics的文件夹,其中存放我们的静态资源,(有的工程中也叫做resources),其中再建一个js的文件夹,将我们刚下载的jQuery的库放进去。
我们在controller包中将新建一个AjaxController,给他加上注解和总映射

  1. @Controller
  2. @RequestMapping("/ajax")

通过这个我们了解下几个常用的使用方法。

第一种方式,服务器要返回一个字符串,直接使用response

  1. @RequestMapping("/a1")
  2. public void ajax1(String name,HttpServletResponse response) throws IOException {
  3. if("admin".equals(name)) {
  4. response.getWriter().print(true);
  5. }else {
  6. response.getWriter().print(false);
  7. }
  8. }

创建前端的一个简单的jsp页面test1.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>Insert title here</title>
  8. <%--要是jQuery.需要导入,注意点:路径问题--%>
  9. <script src="${pageContext.request.contextPath}/statics/js/jquery-3.5.1.js"/></script>
  10. </head>
  11. <body>
  12. <script type="text/javascript">
  13. function a1(){//将文本框输出的值发给服务器再接收服务器返回的值。
  14. //所有参数:
  15. // url:待载入页面的URL地址
  16. // data:待发送Key/value参数
  17. // success:载入成功时回调函数
  18. // (data:封装了服务器返回的数据,status:状态 一般为true)
  19. $.ajax({
  20. url:"${pageContext.request.contextPath}/ajax/a1",
  21. data:{'name':$("#txtName").val()},
  22. success:function(data){
  23. console.log(data);
  24. console.log(status)
  25. }
  26. });
  27. }
  28. </script>
  29. <%--onblur失去焦点产生事件--%>
  30. 用户名:
  31. <input type="text" id="txtName" onblur="a1()">
  32. </body>
  33. </html>

之后我们在对应的jsp页面上输入admin时,之后将我们的鼠标焦点转移他就会像服务器发送name=admin的信息,之后服务端就会返回数据,并打印在console上。

Ajax默认的是get请求,我们可以在使用它的type参数将其改成post,不过我们一般直接将$.ajax换成$.post

第二种,我们返回一个Json字符串

  1. @RequestMapping("/a2")
  2. @ResponseBody
  3. public List<User> ajax2() {
  4. List<User> list = new ArrayList<User>();
  5. list.add(new User("张三",20,"男"));
  6. list.add(new User("李四",20,"女"));
  7. list.add(new User("赵五",18,"男"));
  8. return list; //由于加了@ResponseBody注解,默认返回字符串
  9. }

默认的返回就是json字符串,当然我们也可以用我们之前封装的json工具类去返回。
我们可以再创建一个jsp的界面测试一下

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>Insert title here</title>
  8. <script src="${pageContext.request.contextPath}/statics/js/jquery-3.5.1.js"/></script>
  9. </head>
  10. <body>
  11. <script>
  12. $(function() {
  13. $("#btn").click( function (){
  14. $.post("${pageContext.request.contextPath}/ajax/a2" , function (data){
  15. console.log(data) ;
  16. var html = "";
  17. for (var i=0;i<data.length;i++){
  18. html += "<tr>"
  19. +"<td>"+data[i].name + "</td>"
  20. +"<td>"+data[i].age + "</td>"
  21. +"<td>"+data[i].sex + "</td>" +"</tr>"
  22. }
  23. $ ("#content").html(html);
  24. })
  25. })
  26. })
  27. </script>
  28. <input type="button" id="btn" value="获取数据"/>
  29. <table width="80%" align="center">
  30. <tr>
  31. <td>姓名</td>
  32. <td>年龄</td>
  33. <td>性别</td>
  34. </tr>
  35. <tbody id="content">
  36. </tbody>
  37. </table>
  38. </body>
  39. </html>

注意我们这里精简的写法,这也是我们之后工作中常用的写法

  1. //精简的写法,直接写上参数url等
  2. $(function() {
  3. $("#btn").click( function (){
  4. $.post("${pageContext.request.contextPath}/ajax/a2", function (data){
  5. //回调函数
  6. })
  7. })
  8. })

之后到相应得jsp界面,在点击获取数据按钮后,就可以看到数据


用户登陆验证案例

在用户登陆界面,我们输入用户名或密码后,他就会自动检测我们所输入的是否是正确的。

创建对应的controller中的方法

  1. @RequestMapping("/a3")
  2. @ResponseBody
  3. public String ajax3(String name,String pwd) {
  4. String msg = "";
  5. if (name!=null) {
  6. if ("admin".equals(name)){
  7. msg = "ok";
  8. }else {
  9. msg ="用户有误";
  10. }
  11. }
  12. if(pwd!=null){
  13. if ("123456".equals(pwd)){
  14. msg = "ok";
  15. }else {
  16. msg = "密码输入有误";
  17. }
  18. }
  19. return msg;
  20. }

创建相应的jsp界面,这里面有两个函数

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>Insert title here</title>
  8. <script src="${pageContext.request.contextPath}/statics/js/jquery-3.5.1.js"/></script>
  9. </head>
  10. <body>
  11. <script>
  12. function a1(){
  13. $.post({
  14. url:"${pageContext.request.contextPath}/ajax/a3",
  15. data:{"name":$("#name").val()},
  16. success: function (data){
  17. if (data.toString()== 'ok') {//信息核对成功
  18. $ ('#userInfo').css ("color","green") ;
  19. }else {
  20. $('#userInfo').css ("color","red") ;
  21. }
  22. $("#userInfo").html(data);
  23. }
  24. })
  25. }
  26. function a2(){
  27. $.post(
  28. "${pageContext.request.contextPath}/ajax/a3",
  29. {"pwd":$("#pwd").val()},
  30. function (data){
  31. if (data.toString()== 'ok') {//信息核对成功
  32. $ ('#pwdInfo').css ("color","green") ;
  33. }else {
  34. $('#pwdInfo').css ("color","red") ;
  35. }
  36. $("#pwdInfo").html(data);
  37. })
  38. }
  39. </script>
  40. <p>
  41. 用户名:
  42. <input type="text" id="name" onblur="a1()"/><span id="userInfo"></span>
  43. </p>
  44. <p>
  45. 密码:
  46. <input type="text" id="pwd" onblur="a2()"/><span id="pwdInfo"></span>
  47. </p>
  48. </body>
  49. </html>

之后用户在我们的界面上就可以实现异步交互了,现在很多网页都是这样异步实现的。


总结

使用jQuery需要导入jQuery,使用Vue就导入Vue,两个都不用,自己原生态实现。
三步曲

  1. 编写对应处理的Controller,返回消息或者字符串或者json格式的数据;
  2. 编写ajax请求
  1. url : Controller请求
  2. data :键值对
  3. success:回调函数
  1. 给Ajax绑定事件: 点击.click,失去焦点onblur,键盘弹起 keyup

原文链接:http://www.cnblogs.com/Plokit/p/14339342.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号