Ajax的总结

  • 主要从Ajax是什么?可以用来干什么?基本要素,优缺点,执行过程,跨域的解决方案等几方面来解释。

Ajax是什么?

  • Ajax主要用来实现客户端与服务器端的异步通信效果,实现页面的局部刷新,早期的浏览器并不能原生支持ajax,可以使用隐藏帧(iframe)方式变相实现异步刷新,使用ajax原生发送请求主要通过XMLHttpRequest对象实现异步通信的效果。

Ajax的工作原理

  • 简单来说通过XmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后利用javascript来操作DOm而更新页面,这其中最关键的一步就是从服务器获得请求数据

Ajax要素

  • 实现原生Ajax的核心就是 XMLHttpRequest
  • Ajax请求的重点内容:
    • 请求方式:get/post

      1、get一般用来进行查询操作,url地址有长度限制,请求的参数都暴露在url地址当中,如果传递中文参数,需要自己进行编码操作,安全性较低。

      2、post请求方式主要用来提交数据,没有数据长度的限制,提交的数据内容存在于http请求体中,数据不会暴漏在url地址中。
    • 响应内容:xhr.responseText;(重点)xhr.responseXML
  • 原理:利用script标签向外发出请求不会被拒绝
  • ajax的优缺点
    • 优点:可以使得页面不重载全部内容的情况下加载局部内容,降低数据传输量,避免用户不断刷新或者跳转页面,提高用户体验。
    • 缺点:

      1、ajax不支持浏览器back按钮。

      2、安全问题 AJAX暴露了与服务器交互的细节。

      3、对搜索引擎的支持比较弱。

      4、破坏了程序的异常机制。

Ajax的异步刷新

  • iframe 在一个页面内部嵌入一个子页面

    • name属性表示iframe的名称,用于区分不同的iframe
    • iframe属性frameborder表示子页面的边框
    • width和height分别表示子页面的宽高
    • src属性表示嵌入子页面的url地址
  • 可以通过表单的target属性指向iframe的name属性值,表示响应内容在子页面刷新
     <div id="info"></div>
<form action="./inner.php" method="post" target="abc">
用户名:<input type="text" name="username">
密 码:<input type="password" name="password">
<input type="submit" value="提交">
</form>
<iframe width="0" height="0" frameborder="0" name="abc"></iframe>
    <?php 

    $uname = $_POST['username'];
$pw = $_POST['password'];
// js中的parent表示父级页面
if($uname == 'admin' && $pw == '123'){
echo '<script> parent.document.getElementById("info").innerHTML = "登录成功";</script>';
}else{
echo '<script> parent.document.getElementById("info").innerHTML = "用户名或者密码错误";</script>';
} ?>

ajax的基本操作步骤

  • 执行过程
       // 1、创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
// 2、配置发送参数
xhr.open('get','./data.php');
// 3、执行发送动作
xhr.send(null);
// 4、处理响应
xhr.onreadystatechange = function(){
if(xhr.status == 200){
if(xhr.readyState == 4){
// 在这里才可以获取服务器返回的数据
var result = xhr.responseText;
if(result === '1'){
var info = document.getElementById('info');
info.innerHTML = '服务器数据已经返回';
}
}
}
}
  • 封装
       function myajax(type,url,param,callback){
// 1、创建xhr对象
var xhr = null;
if(window.XMLHttpRequest){
// 标准写法
xhr = new XMLHttpRequest();
}else{
// IE的写法
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
// 2、准备发送参数
if(type == 'get'){
// 处理get请求参数,并且进行编码
url += '?' + encodeURI(param);
}
xhr.open(type,url);
// 3、执行发送动作
var data = null;
if(type == 'post'){
// 如果是post提交,那么就把参数传递给send
data = param;
// post提交必须设置请求头
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
}
xhr.send(data);
// 4、处理响应(指定回调函数)
// 下面的回调函数什么时候执行?不确定的
xhr.onreadystatechange = function(){
// 判断响应的状态
if(xhr.status == 200 && xhr.readyState == 4){
// 获取响应数据
var result = xhr.responseText;
// 调用回调函数
callback(result);
}
}
}

ajax的跨域解决方案

jsonp,是一种解决方案,默认是get请求,如果有需求是post请求的话,可以使用CORS跨域资源共享,客服了ajax只能同源请求的限制,实现CORS通信的关键是服务器,只要服务器实现了CORS接口,就可以跨域通信。

浏览器将CORS请求分为俩大类,简单强求和非简单请求

ajax的优点和缺点

  • 优点

    可以实现异步通信的效果,实现局部刷新,带来更好的用户体验,按需获取数据,节约带宽资源。
  • 缺点

    ajax不支持浏览器的back按钮。

    安全问题(暴露了与服务器交互的细节)。

    破坏了程序的异常机制。

    对搜索引擎的支持性比较弱。

总结Ajax的一些细节的更多相关文章

  1. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

  2. Jquery重新学习之九[Ajax运用总结C]

    前两篇文章主要介绍Jquery如何利用Ajax进行操作数据,主要介绍调用的方法:其中Jquery.ajax()是Jquery中最底层的方法:Jquery还定义的一个方法跟几个事件为Jquery.aja ...

  3. 日记整理---->2016-11-23

    这里放一些jquery的学习知识.可能从一开始就是我一个人单枪匹马,来年不求并肩作战,只愿所向披靡. jquery的学习一 jquery关于ajax的一些学习博客 ajax方法的介绍:https:// ...

  4. 在React组件unmounted之后setState的报错处理

    最近在做项目的时候遇到一个问题,在 react 组件 unmounted 之后 setState 会报错.我们先来看个例子, 重现一下问题: class Welcome extends Compone ...

  5. ajax容易忽视的细节

    用了很长时间的ajax,自己也写过原生ajax请求,但是发现自己对于ajax理解仍然非常肤浅. 1.ajax请求后,服务器会返回数据,返回头中content-type直接影响responseXML,r ...

  6. Ajax与json在前后端中的细节解惑

    ajax请求JSON Thinkphp中对是否为Ajax的判断,在TP3.2开发手册中有这么一段:“需要注意的是,如果使用的是ThinkAjax或者自己写的Ajax类库的话,需要在表单里面添加一个隐藏 ...

  7. ajax载入数据是小细节

    今天看了一个点子: 在 ajax 导入数据的 div中添加一些样式,比如:我们正紧急抢救 增加趣味性,有解决数据卡壳问题

  8. 浅谈Ajax 异步的几点细节

    1.浏览器执行到Ajax代码的这行语句的时候,发出了一个HTTP请求,欲想请求服务器上的数据.服务器此时开始I/O,所谓的I/O就是磁盘的读写,需要花费一些时间,所以不会立即产生下行的HTTP报文: ...

  9. Ajax向Controller发送请求并接受数据需要注意的一个细节

    想用Ajax想向Controller发送请求和接收返回的字符等等.Controller中要使用@ResponseBody注解. <script type="text/javascrip ...

随机推荐

  1. Ubuntu 16.04 Go环境搭建 Go环境+Sublime配置

    Ubuntu 16.04 Go环境搭建 Go环境+Sublime配置 1. 安装Go 下载地址https://golang.org/dl/ (需要翻下) 下载到类似go1.8.3.linux-amd6 ...

  2. gcc编译c中有与lua交互的代码

    编译C程序中有与Lua有关的程序(编译环境是Linux系统,lua解释器是luajit)gcc -o test30 test30.cpp -I/usr/local/include/luajit-2.0 ...

  3. 51nod 237 最大公约数之和 V3 杜教筛

    Code: #include <bits/stdc++.h> #include <tr1/unordered_map> #define setIO(s) freopen(s&q ...

  4. selenim

    一.安装selenium Pip install selenium==2.53.1    (稳定版) 下载火狐浏览器35.0.1  http://dl.pconline.com.cn/download ...

  5. virtualenv和virtualenvwrapper的安装与使用

    环境 Windows 10 python 3.6.7 virtualenv 安装 virtualenv用于创建虚拟环境,用于隔离不同的python版本的运行,是容器类软件.这里在Windows下通过p ...

  6. event 下鼠标坐标的获取

    event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 event.pageX ...

  7. POJ 3370 Halloween treats( 鸽巢原理简单题 )

    链接:传送门 题意:万圣节到了,有 c 个小朋友向 n 个住户要糖果,根据以往的经验,第i个住户会给他们a[ i ]颗糖果,但是为了和谐起见,小朋友们决定要来的糖果要能平分,所以他们只会选择一部分住户 ...

  8. [Ubuntu]安装中文输入法

    安装了英文版的Ubuntu12.04之后.使用ctrt+space无法切换到中文,才反应过来. 于是查询了下怎么在Ubuntu下安装和配置中文输入法. 第一步安装语言包: 在左側的菜单条中点击 sys ...

  9. C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制

    在之前的博客中我们已经将项目中用到的算法表述完成,包含人脸检測算法以及四种性别识别算法,在这篇博客中我们将着手搭建主要的MFC框架. 一.框架概况 在这篇博文中我们将搭建最主要的MFC框架.绘制MFC ...

  10. 【POJ 1850】 Code

    [POJ 1850] Code 还是非常想说 数位dp真的非常方便! !. 数位dp真的非常方便!.! 数位dp真的非常方便! !! 重要的事说三遍 该题转换规则跟进制差点儿相同 到z时进一位 如az ...