InstelliJ IDEA使用js+servlet+ajax入门
对于Ajax,我们先了解三点(完整的JS代码在后面)
一、Ajax的出现对javascript的影响。
Ajax是微软提出的一种允许客户端脚本发送HTTP请求的技术(XMLHTTP),拯救了大多数java程序员讨厌的javascript
二、浏览器兼容性
想使用Ajax得创建一个对象,就是它
new XMLHttpRequest();
但是,IE的低版本不支持以上这种方式,IE真讨厌。。它支持这种方式,
new ActiveXObject("Microsoft.XMLHTTP");
三、异步与同步
通俗点的意思:
异步:就是大家想洗澡的时候一个开始脱衣服,后一个就开始脱衣服,不等前一个脱完。
同步:会等前一个人脱完再脱。。。
正题,如何使用Ajax
先创建一个web项目
打开web下的.jsp文件,首先使用html创建一个按钮,代码如下
<button onclick="ck();">点击</button>
然后在js部分我们先创建一个函数,叫做ajax_test(),代码如下
fuction ajax_test(){
}
上面我们说过了使用Ajax需要创建一个对象,但是需要判断是否为IE或者其他浏览器,代码如下
if(XMLHttpRequest){
return new XMLHttpRequest();
}else if(ActiveXObject){
return new ActiveXObject("Microsoft.XMLHTTP");
}else{
alert("其他浏览器!");
}
创建一个ck()函数接收ajax_test()返回的对象,我们需要使用带这个对象的方法
function ck(){
var xhr=ajax_test():
}
在这个对象中有两个方法,open()和send(),写入ck()中,分别用来准备和发送,
function ck(){
var xhr=ajax_test();
xhr.open("GET","/ajax_test/p1/Servlet1",true);
xhr.send();
}
本来我们提交到服务器的需要用到表单,这会刷新一次网页,但是使用ajax可以实现局部刷新,所以open()代替了原来的表单提交。
open共有五个参数,后面两个参数为远程服务器交互的时候需要的用户名和密码,这里我们使用在同一个机器上的所以选择忽略,
第一个参数为提交的方式,为get和post提交,不区分大小写,第二个参数为Servlet的url(/项目名称/包/服务器类)可以在服务器查看request.getRequestURI(),可以在服务器查看是什么,第三个参数是否异步,可以不写,默认为异步
而我们send()的时候就会发送了。
这个时候我们在服务器写一个输出流,当Ajax访问服务器时,就会响应,
response.getWriter().print("访问到服务器");
Ajax中有一个属性为responseText,它的值为服务器响应的值,即"访问到服务器",我们需要在js的代码中打印出来,如下
function ck(){
var xhr=ajax_test();
xhr.open("GET","/ajax_test/p1/Servlet1",true);
xhr.send();
alert("send");
alert(xhr.responseText);
}
那上面的代码为什么需要在打印出responseText前先打印send呢?因为它是异步,我们发送send()的时候还没有获取到服务器的响应(还没有ok),有一个属性为readyState,它有五个值(0~4)4代表ok,我们需要等他执行完为4的时候才能获取到
服务器的响应,那我们直接同步false不就可以了吗?同步的效率比异步慢,所以这个对象里有一个可以监听的方法,onreadystatechange,它可以解决这个问题,代码如下,必须写在send()前
xhr.onreadystatechange = function(){
alert(xhr.responseText);
}
js完整代码如下,服务器的代码只有一句输出流
<script>
function ajax_test(){
if(XMLHttpRequest){
return new XMLHttpRequest();
}else if(ActiveXObject){
return new ActiveXObject("Microsoft.XMLHTTP");
}else{
alert("其他浏览器");
}
}
function ck(){
var xhr=ajax_test();
xhr.open("GET","/ajax_test/p1/Servlet1",true);
xhr.onreadystatechange = function(){
alert(xhr.responseTex);
}
xhr.send();
}
</script>
以上为我接触Ajax的理解,今天就到这里,有不懂的地方可以问下我,有空回复。
---2019-5-23 从沙尘暴中逃出的你已不再是跨入沙尘暴时的你《海边的卡夫卡》。
InstelliJ IDEA使用js+servlet+ajax入门的更多相关文章
- JavaWeb(HTML +css+js+Servlet....)
注意 1.不要把函数命名为add(),不然容易和自带的冲突报错 2.是createElement 不要把create中的e写掉了 3.记得是getElementsByTaxName和getElemen ...
- JavaEE的ajax入门
JavaEE的ajax入门 代码下载 链接:https://pan.baidu.com/s/1pb_sdSmV9Ncs6UIz3q2ztg 提取码:fgx6 复制这段内容后打开百度网盘手机App,操作 ...
- prototype.js 和 jQuery.js中 ajax 的使用
这次还是prototype.js 和 jQuery.js冲突的问题,前面说到过解决办法http://www.cnblogs.com/Joanna-Yan/p/4836252.html,以及上网说的大部 ...
- ajax入门之建立XHR对象 (1)
ajax入门之建立XHR对象 今天帮朋友写了一个简单的ajax的demo,发现了一些东西,决定写一篇文章记录一下,避免以后挖坑. 创建XMLHttpRequest 通常 function create ...
- Vue (一) --- vue.js的快速入门使用
=-----------------------------------把现在的工作做好,才能幻想将来的事情,专注于眼前的事情,对于尚未发生的事情而陷入无休止的忧虑之中,对事情毫无帮助,反而为自己凭添 ...
- ASP.NET AJAX入门系列
ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...
- 系列文章--ASP.NET之AJAX入门教程
ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...
- 【JS】AJAX跨域-被调用方与调用方解决方案(二)
解决跨域问题 跨域问题说明,参考[JS]AJAX跨域-JSONP解决方案(一) 实例,使用上一章([JS]AJAX跨域-JSONP解决方案(一))的实例 解决方案三(被调用方支持跨域-服务端代码解决) ...
- Django学习——图书管理系统图书修改、orm常用和非常用字段(了解)、 orm字段参数(了解)、字段关系(了解)、手动创建第三张表、Meta元信息、原生SQL、Django与ajax(入门)
1 图书管理系统图书修改 1.1 views 修改图书获取id的两种方案 1 <input type="hidden" name="id" value=& ...
随机推荐
- [egret+pomelo]实时游戏杂记(1)
[egret+pomelo]学习笔记(1) [egret+pomelo]学习笔记(2) [egret+pomelo]学习笔记(3) 资料 egret pomelo pomelo捡宝项目 准备工作 1. ...
- uboot移植添加nfs支持
手头6410开发板uboot(基于2011.06)其他功能包括ping和tftp都执行正常,唯独缺少nfs. 只需要在其配置文件(每个开发板文件通常名称不同,include/configs/*6410 ...
- importlib模块 反射字符串的对象
通过 importlib模块 反射字符串的对象 Python 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609] on linux ...
- ssh_jar包选择
1.struts2.3.29 + spring-framework-3.2.9.RELEASE +hibernate-distribution-3.6.10 * struts 所需jar 在:如下所示 ...
- python日期格式化符号
python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数( ...
- iOS开发数据库-FMDB
前言 FMDB是以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码:对比苹果自带的Core Data框架,更加轻量级和灵活:提供了多线程安全的数据库操 ...
- ZOJ 1141 Closest Common Ancestors(LCA)
注意:poj上的数据与zoj不同,第二处输入没有逗号 ' , ' 题意:输出测试用例中是最近公共祖先的节点,以及这个节点作为最近公共祖先的次数. 思路:直接求,两个节点一直往上爬,知道爬到同一个节点, ...
- PHP中调用接口
引用:http://zhidao.baidu.com/question/454935450.html&__bd_tkn__=67bd5d3a742a8b244e09a86fb8b824aa95 ...
- WEB攻击之 CSRF 攻击及防御策略
介绍 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法. 释义: 跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如 ...
- HDU5875Function(单调队列)
The shorter, the simpler. With this problem, you should be convinced of this truth. You are giv ...