对于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入门的更多相关文章

  1. JavaWeb(HTML +css+js+Servlet....)

    注意 1.不要把函数命名为add(),不然容易和自带的冲突报错 2.是createElement 不要把create中的e写掉了 3.记得是getElementsByTaxName和getElemen ...

  2. JavaEE的ajax入门

    JavaEE的ajax入门 代码下载 链接:https://pan.baidu.com/s/1pb_sdSmV9Ncs6UIz3q2ztg 提取码:fgx6 复制这段内容后打开百度网盘手机App,操作 ...

  3. prototype.js 和 jQuery.js中 ajax 的使用

    这次还是prototype.js 和 jQuery.js冲突的问题,前面说到过解决办法http://www.cnblogs.com/Joanna-Yan/p/4836252.html,以及上网说的大部 ...

  4. ajax入门之建立XHR对象 (1)

    ajax入门之建立XHR对象 今天帮朋友写了一个简单的ajax的demo,发现了一些东西,决定写一篇文章记录一下,避免以后挖坑. 创建XMLHttpRequest 通常 function create ...

  5. Vue (一) --- vue.js的快速入门使用

    =-----------------------------------把现在的工作做好,才能幻想将来的事情,专注于眼前的事情,对于尚未发生的事情而陷入无休止的忧虑之中,对事情毫无帮助,反而为自己凭添 ...

  6. ASP.NET AJAX入门系列

    ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...

  7. 系列文章--ASP.NET之AJAX入门教程

    ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...

  8. 【JS】AJAX跨域-被调用方与调用方解决方案(二)

    解决跨域问题 跨域问题说明,参考[JS]AJAX跨域-JSONP解决方案(一) 实例,使用上一章([JS]AJAX跨域-JSONP解决方案(一))的实例 解决方案三(被调用方支持跨域-服务端代码解决) ...

  9. Django学习——图书管理系统图书修改、orm常用和非常用字段(了解)、 orm字段参数(了解)、字段关系(了解)、手动创建第三张表、Meta元信息、原生SQL、Django与ajax(入门)

    1 图书管理系统图书修改 1.1 views 修改图书获取id的两种方案 1 <input type="hidden" name="id" value=& ...

随机推荐

  1. WebsiteCrawler

    看到网上不少py的爬虫功能极强大,可惜对py了解的不多,以前尝试过使用c# WebHttpRequert类来读取网站的html页面源码,然后通过正则表达式筛选出想要的结果,但现在的网站中,多数使用js ...

  2. CodeForces - 552E Vanya and Brackets —— 加与乘运算的组合

    题目链接:https://vjudge.net/contest/224393#problem/E Vanya is doing his maths homework. He has an expres ...

  3. POJ2443 Set Operation —— bitset

    题目链接:https://vjudge.net/problem/POJ-2443 Set Operation Time Limit: 3000MS   Memory Limit: 65536K Tot ...

  4. hdu-5795 A Simple Nim(组合游戏)

    题目链接: A Simple Nim Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  5. jquery新添加元素无法删除

    $("body").on('click',".delic",function(){ $(this).parent().remove(); })

  6. MongoDB 使用经验笔记

    bin下的mongod就是MongoDB的服务端进程,mongo就是其客户端,其它的命令用于MongoDB的其它用途如MongoDB文件导出等 启动方式: 1.直接启动,指定各项参数: /usr/lo ...

  7. poj1011 Sticks[剪枝题]

    https://vjudge.net/problem/POJ-1011 此题很重要.★★★ 很欢(e)乐(xin)的一道搜索剪枝题..poj数据还是太水了,我后来想不出来剪枝方法了,就加了句掐了时间语 ...

  8. python爬虫知识点总结(二)爬虫的基本原理

    一.什么是爬虫? 答:请求网页并提取数据的自动化程序. 二.爬虫的基本流程 三.什么是Request和Response? 1.Request 2.Response 四.能抓取怎样的数据 五.解析方式 ...

  9. 使用Netty实现的一个简单HTTP服务器

    1.HttpServer,Http服务启动类,用于初始化各种线程和通道 public class HttpServer { public void bind(int port) throws Exce ...

  10. .NETFramework-Timers:Timer

    ylbtech-.NETFramework-Timers:Timer 1.程序集 System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b7 ...