JavaScript基础之AJAX简单的小demo


Posted in Javascript onJanuary 29, 2017

AJAX

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

function prepareForms() {
 for(var j=0 ; j<document.forms.length ; j++){
  var this_forms = document.forms[j];
  resetFields(this_forms);
   this_forms.onsubmit = function () {
    if(!validateForm(this)) return false; //进行浏览器端表单验证
    var article = document.getElementsByTagName("article")[0];
    if(submitFormWithAjax(this,article)) return false; //代表防止重复提交 实际的提交已经完成
   return true;
   }
 }
}

首先 通过表单的提交事件调用相应的验证方法 和ajax提交方法 如果说ajax提交成功 返回false 拦截提交事件 如果ajax失败 则正常提交

function displayAjaxLoading(element) {
 while(element.hasChildNodes()){
  element.removeChild(element.lastChild); //如果还有子节点 重复删除 直到内部为空
 }
 var content = document.createElement("img");
 content.setAttribute("src","images/loading.gif");
 content.setAttribute("alt","loading....");
 element.appendChild(content);
} //拿到元素 清空内部 并添加一个img
function submitFormWithAjax(whichform,thetarget) {
 var request = getHTTPObject();
 if(!request){return false ;}
 displayAjaxLoading(thetarget);//调用加载方法
 var dataParts = [];
 var element; //提前创建要用的容器
 for(var i=0 ; i<whichform.elements.length ; i++){
  element = whichform.elements[i];
  dataParts[i] = element.name + "=" +encodeURIComponent(element.value) //把元素的名字和值转化成URL编码放入容器中
 }
 var data = dataParts.join("&"); //把数组转化成一串字符串 每个项目之间用&连接
 request.open("post",whichform.getAttribute("action"),true); //向表单目标地址准备提出名为post的请求
 request.setRequestHeader("content-type","application/x-www-form-urlencoded");//设置头部信息
 //获取请求后就会调用一下的 方法 算是一个触发器 服务器会执行以下内容
 request.onreadystatechange = function () {
  if(request.readyState == 4){
   if(request.status == 200 || request.status == 0){
    var matches = request.responseText.match(/<article>([\s\S]+)<\/article>/) //捕获文本
    if(matches.length>0){
     thetarget.innerHTML = matches[1]; //正则表达式返回0为包含<article> 1为不包含的版本
    }
    else {
     thetarget.innerHTML = "<p>sorry not find</p>";
    }
   }
   else {
    thetarget.innerHTML = "<p>" + request.statusText + "</p>";
   }
  }
 }
 request.send(data); //对目标服务器发送请求
 return true;//代表函数执行完毕
}

让我们分步来查看具体做了什么事情

第一 获取了一个请求对象

第二 调用display方法 让页面删除article下的所有元素并放上load动画

第三 创建URL编码的请求 用数组存放 一项里面为name和被URL转义的value 然后把他每项通过&连接 组成一个完整的字符串

第四 设置了请求的基本属性 比如命名 目标地址 头文件

第五 创建一个监听程序 监听请求 如果成功则把响应的html填入到目标article中
第六 正式发送请求 成功返回ture

以上所述是小编给大家介绍的JavaScript基础 AJAX简单的小demo ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
escape、encodeURI 和 encodeURIComponent 的区别
Mar 02 Javascript
JS request函数 用来获取url参数
May 17 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
Jun 06 Javascript
JQuery中$.each 和$(selector).each()的区别详解
Mar 13 Javascript
jQuery的几个我们必须了解的特点
May 03 Javascript
JQuery页面地址处理插件jqURL详解
May 03 Javascript
jQuery Ajax 加载数据时异步显示加载动画
Aug 01 Javascript
jQuery中的select操作详解
Nov 29 Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
Jan 01 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
vue项目持久化存储数据的实现代码
Oct 01 Javascript
JavaScript Date 知识浅析
Jan 29 #Javascript
JavaScript实现时钟滴答声效果
Jan 29 #Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
Jan 29 #Javascript
jQuery图片轮播功能实例代码
Jan 29 #Javascript
jQuery代码实现实时获取时间
Jan 29 #Javascript
用director.js实现前端路由使用实例
Jan 27 #Javascript
详解bootstrap的modal-remote两种加载方式【强化】
Jan 27 #Javascript
You might like
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
js运动应用实例解析
2015/12/28 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
总结Python编程中函数的使用要点
2016/03/20 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
2014大学生党员评议个人总结
2014/09/22 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
优秀党员个人总结
2015/02/14 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android