前言

没有学Ajax之前,就在想这到底是一门什么技术,问自己

什么是Ajax?

Ajax有哪些重点概念?

Ajax如何运用?

听说JQuery与Ajax更配?

一、Ajax简介。

1、AJAX全称:异步的JavaScript和XML

2、AJAX不是编程语言,是一种无需重新载入整个页面,能够更新部分网页的技术。

3、要想更新内容或者提交一个表单,就要重新载入整个页面;使用AJAX技术的页面,通过与后台服务器进行少量的数据交换,就可以实现异步局部更新。

4、同步和异步:

同步:需要更新内容或者提交表单时,需要对整个页面向服务器请求->服务器处理、响应->页面载入

如果错误,再次请求,等待,响应;需要对整个页面解析重新载入,很多时候等待的时间很长,让人很抓狂。

异步:针对页面部分内容进行请求,服务器处理响应,页面刷新载入这一部分;这中间不会影响页面其他交互,无需进行等待,提升了用户体验。

二、Ajax概念

1、XMLHttpRequest对象

IE5、IE6支持Active X对象。

所有现代浏览器(IE7 、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。

在新浏览器上,创建对象很简单,使用构造函数:var xhr=new XMLHttpRequest();老浏览器可能不常用,但我们要考虑在里边,兼容老浏览器:

function createXHR(){
    if(typeof XMLHttpRequest !="undefined"){
//如果浏览器不支持XMLHttpRequest对象,就使用IE5、IE6对象ActiveXObject
        return new XMLHttpRequest();
    }else if(typeof ActiveXobject !="undefined"){
        if(typeof arguments.callee.activeXString !="string"){
            var versions=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],
                i,len;
                for(i=0,len=versions.length;i<len;i  ){
                    try{
                        new new ActiveXObject(versions[i]);
                        arguments.callee.activeXString = versions[i];
                        break;
                    }catch(ex){
                        //
                    }
                }
        }
        return new ActiveXObject(arguments.callee.activeXString);
    }else{
        throw new Error("No XHR object available");
    }
}

这个函数首先检测原生XHR对象是否存在,如果存在,就返回它的实例。XHR不存在,检测ActiveX对象;否则,抛出错误。
创建兼容的XHR对象就可以使用:var xhr=createXHR();

2、HTTP请求

在运用Ajax之前,我认为先了解HTTP更有助于理解Ajax方法。

HTTP是一种应用进程与服务器之间连接的协议,无状态协议,也就是没有记忆,每一次请求都需要重新建立连接。

HTTP请求过程:

1>建立TCP连接

2>Web浏览器向Web服务器发送请求命令

3>Web浏览器发送请求头信息

4>Web服务器应答

5>Web服务器发送应答头信息

6>Web服务器向浏览器发送数据

7>Web服务器关闭TCP连接

HTTP状态码:

  • 1XX:信息类,表示收到Web浏览器请求,正在进一步处理中
  • 2XX:成功,表示用户请求被正确接收,如200
  • 3XX:重定向,表示请求没有成功,客户必须采取进一步动作
  • 4XX:客户端错误,表示客户端提交的请求有错误,例如:404 NOT Found,意味着请求中所引用的文档不存在
  • 5XX:服务器错误,表示服务器不能完成对请求的处理,如:500

3、XHR用法

向服务器发送请求,需要使用XMLHttpRequest对象的open()和send()方法。

方法 描述
open(method,url,async) 规定请求的类型、URL 以及是否异步处理请求。
  method:请求的类型;GET 或 POST
  url:文件在服务器上的位置
  async:true(异步)或 false(同步)
send(string) 将请求发送到服务器。
  string:仅用于 POST 请求

发送请求:

xhr.open("get","example","false")//同步xhr.send(null);同步:JavaScript 会等到服务器响应就绪才继续执行。

异步:在等待服务器响应时执行其他脚本;

当响应就绪后对响应进行处理。

① 当服务器响应后会填充XHR对象属性

->responseText 获得字符串形式的响应数据。

->responseXML 获得 XML 形式的响应数据。

->status 响应的HTTP状态码

->statusText HTTP状态码说明

② 异步下检测XHR对象的readyState属性,请求过程中的活动阶段:

->0:未初始化,尚未调用open()方法

->1:启动,已经调用open()方法,但未调用send()方法

->2:发送,已经调用send()方法,尚未接到响应

->3:接收,已接收部分数据

->4:完成,已经接收全部响应数据。

readyState改变就会触发一次readyStatechange事件,可以利用这个事件来检测readyState变化的值。必须在open()之前指定onreadyStatechange事件处理程序。

var xhr=createXHR();
xhr.onreadyStatechange=function(){
  if(xhr.readyState==4){
      if(xhr.status >=200 && xhr.status<300){
            alert(xhr.responseText);
      }else{
            alert("Request was unsuccessful:" xhr.status);
      }
  }
}
xhr.open("get","example.txt",true);
xhr.send(null);

默认情况下,在发送XHR请求的同时,还会发送一些默认的头部信息。

使用 setRequestHeader() 可以设置自定义的请求头部信息:这个方法接收2个参数,头部字段的名称和头部字段的值。

setRequestHeader() 方法必须在open()后,send()前调用

xhr.open("get","example.txt",true); xhr.setRequestHeader("myheader","myvalue"); xhr.send(null);调用XHR对象的getRequestHeader() 方法,并传入头部字段名称可以取得相应的响应头部信息。

③ get请求、post请求

  • get 请求
  • 常用于向服务器查询(获取)某些信息,需要注意传入的URL格式,查询的字符串参数名称和值都必须经过 encodeURIComponent() 进行编码,然后放到URL末尾;而且所有的名称和值和后一个需用"&"隔开。
  • xhr.open("get","example.php?name1=value1&name2=value2",true);可向现有url后添加查询字符串参数:
function addURLParam(url,name,value){
    url  =(url.indexOf("?") == -1  ?  "?" : "&");//检测url后是否已有参数
    url  =encodeURIComponent(name)   "="   encodeURIComponent(value);
    return url;
}
//示例
var url="example.php";
//添加参数
url=addURLParam(url,"name","Nico");
//初始化请求
xhr.open("get",url,true);
  • post请求
    下列情况使用:
    ->无法使用缓存文件(更新服务器上的文件或数据库)
    ->向服务器发送大量数据(POST 没有数据量限制)
    ->发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
    如果需要像 HTML 表单那样 POST 数据;首先使用 setRequestHeader() 来设置 HTTP 头"Content-type"为"application/x-www-form-urlencoded",其次以适当格式创建字符串。
var xhr=createXHR();
//省略
xhr.open("POST","ajax_test.asp",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var form=document.getElementById("user-info");
xhr.send(serialize(form));

三、jQuery - AJAX

jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。

  • jQuery $.get() 方法
    语法:$.get(URL,callback);
    必需的 URL 参数规定您希望请求的 URL。
    可选的 callback 参数是请求成功后所执行的函数名。
    例子:
$("button").click(function(){
    $.get("demo_test.asp",function(data,status){
      alert("Data: "   data   "\nStatus: "   status);
    });
});```
  jQuery $.post() 方法
语法:$.post(*URL*,*data*,*callback*);
必需的 *URL* 参数规定您希望请求的 URL。
可选的 *data* 参数规定连同请求发送的数据。
可选的 *callback* 参数是请求成功后所执行的函数名。
例子:
$("button").click(function(){
$.post("demo_test_post.asp",
{
name:"Donald Duck",
city:"Duckburg"
},
function(data,status){
alert("Data: "   data   "\nStatus: "   status);
});
});

$.post() 的第一个参数是我们希望请求的 URL ("demo_test_post.asp")。
然后我们连同请求(name 和 city)一起发送数据。
"demo_test_post.asp" 中的 ASP 脚本读取这些参数,对它们进行处理,然后返回结果。
第三个参数是回调函数。第一个回调参数存有被请求页面的内容,而第二个参数存有请求的状态。
######四、运用Ajax
现在一般都用JQuery-Ajax,学习了之后,我还是有疑惑,知识清楚了之后如何运用?用在哪里?
想着给自己出个demo运用刚学的知识,等待更新。。。

总结

到此这篇关于原生Ajax与JQuery Ajax的文章就介绍到这了,更多相关原生Ajax与JQuery Ajax内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

简单聊一聊原生Ajax与JQuery Ajax的更多相关文章

  1. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. 在IOS9中的Cordova应用程序使用JQuery / Javascript的window.history问题

    在两个测试用例中唯一改变的是Cordova.js.解决方法我看到这是几个星期前,但我会发布这个,以防其他人遇到它.听起来它可能与iOS9中的哈希更改生成的导航事件有关.如果是这样,可以将其添加到index.html以禁用哈希侦听:

  3. iOS 5上的jQuery事件

    解决方法在Apple开发论坛上由一个人回答:我需要在将元素添加到DOM之后才绑定(),如下所示:

  4. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  5. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  6. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  7. 设置焦点到输入框和显示Android键盘使用jquery手机在pageshow

    我正在设置焦点到输入框,并显示Android键盘使用jquery手机网页显示.我从Web上尝试过很多选项.但是没有一个在模拟器和移动设备中都能按预期工作.这是代码:查找屏幕截图以供参考请咨询…解决方法对我有用的解决方案

  8. android – 如何在焦点()上以编程方式隐藏jquery mobile中的键盘

    我想在Focus()上隐藏键盘,但是当$(“.ui-input-text”).focus();它会自动打开键盘.我只是想隐藏在特定的屏幕上,我用document.activeElement.blur()测试;但它也没有关注()输入.解决方法提交表单时,iOS键盘可能不会自动关闭.这是一个非常实用的问题,因为不应要求用户手动关闭键盘,否则他们不会期望需要这样做.可以通过调用document.acti

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. jQuery实现简单的抽奖游戏

    这篇文章主要为大家详细介绍了jQuery实现简单的抽奖游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部