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 相关文章推荐
通过Unicode转义序列来加密,按你说的可以算是混淆吧
May 06 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
js 数据类型转换总结笔记
Jan 17 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
Jan 17 Javascript
JQuery设置和去除disabled属性的5种方法总结
May 16 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
Jul 01 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
Sep 18 Javascript
AngularJS遍历获取数组元素的方法示例
Nov 11 Javascript
vue-music关于Player播放器组件详解
Nov 28 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
Sep 18 Javascript
2分钟实现一个Vue实时直播系统的示例代码
Jun 05 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
学习使用PHP数组
2006/10/09 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
python使用turtle库绘制时钟
2020/03/25 Python
Python理解递归的方法总结
2019/01/28 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
德国消费电子产品购物网站:Guter Kauf
2020/09/15 全球购物
如何进行有效的自我评价
2013/09/27 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
二人合伙经营协议书
2014/09/13 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python