ajax 和xmlHttpRequest区别

news/2024/7/24 4:01:16 标签: ajax, javascript, 服务器

本文转载自博客园
作者:朝阳的向日葵
原文链接:ajax 和xmlHttpRequest区别

什么是 ajax

ajax 即“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),也就是无刷新数据读取。

http 请求

首先需要了解 http 请求的方法(GET 和 POST)。

GET 用于获取数据。GET 是在 URL 中传递数据,它的安全性低,容量低。

POST 用于上传数据。POST 安全性一般,容量几乎无限。

ajax 请求

ajax 请求一般分成 4 个步骤。

1、创建 ajax 对象

在创建对象时,有兼容问题:

var oAjax = new XMLHttpRequest();   //for ie6 以上
var oAjax = new ActiveXObject('Microsoft.XMLHTTP'); //for ie6

合并上面的代码:

var oAjax = null;
if(window.XMLHttpRequest){
    oAjax = new XMLHttpRequest();
}else{
    oAjax = new ActiveXObject('Microsoft.XMLHTTP');
}

2、连接服务器

在这里会用到 open() 方法。open() 方法有三个参数,第一个参数是连接方法即 GET 和 POST,第二个参数是 URL 即所要读取数据的地址,第三个参数是否异步,它是个布尔值,true 为异步,false 为同步。

oAjax.open('GET', url, true);

3、发送请求

send() 方法。

oAjax.send();

4、接收返回值

onreadystatechange 事件。当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState:请求状态,返回的是整数(0-4)。

0(未初始化):还没有调用 open() 方法。

1(载入):已调用 send() 方法,正在发送请求。

2(载入完成):send() 方法完成,已收到全部响应内容。

3(解析):正在解析响应内容。

4(完成):响应内容解析完成,可以在客户端调用。

status:请求结果,返回 200 或者 404。

200 => 成功。

404 => 失败。

responseText:返回内容,即我们所需要读取的数据。需要注意的是:responseText 返回的是字符串。

复制代码
oAjax.onreadystatechange=function(){
    if(oAjax.readyState==4){
        if(oAjax.status==200){
            fnSucc(oAjax.responseText);
        }else{
            if(fnFaild){
                fnFaild();
            }
        }
    }
};
复制代码

将以上代码进行封装:

复制代码
function ajax(url, fnSucc, fnFaild){
    //1.创建对象
    var oAjax = null;
    if(window.XMLHttpRequest){
        oAjax = new XMLHttpRequest();
    }else{
        oAjax = new ActiveXObject("Microsoft.XMLHTTP");
    }
//2.连接服务器  
oAjax.open('GET', url, true);   //open(方法, url, 是否异步)
  
//3.发送请求  
oAjax.send();
  
//4.接收返回
oAjax.onreadystatechange = function(){  //OnReadyStateChange事件
    if(oAjax.readyState == 4){  //4为完成
        if(oAjax.status == 200){    //200为成功
            fnSucc(oAjax.responseText) 
        }else{
            if(fnFaild){
                fnFaild();
            }
        }
    }
};

}

复制代码

最后附上实例:

复制代码
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>ajax基础</title>
</head>
<body>
    点击按钮的时候,读取abc.txt<input id="btn" type="button" value="读取"/><br/>
    <div id="con"></div>
</body>
</html>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript">
window.onload = function(){
    var oBtn = document.getElementById('btn');
    var oCon = document.getElementById('con');
    oBtn.onclick = function(){
        ajax('abc.txt',function(str){
            oCon.innerHTML = str;
        });
    }
}
</script>
复制代码

abc.txt 内容:

这是ajax调用的内容1。
这是ajax调用的内容2。
这是ajax调用的内容3。

 


http://www.niftyadmin.cn/n/1846091.html

相关文章

Apue Chapter 7 习题答案

Q7.1 在Intel X86系统上&#xff0c;使用Linux&#xff0c;如果执行一个输出“hellow world"的程序但不调用exit或者return&#xff0c;则程序返回的代码为13,&#xff08;用shell检查),解释其原因。因为hellow world 一共是13个字符&#xff0c;最后的$?值是printf(&quo…

.net创建一般处理程序ashx

打开vs 2019&#xff0c;创建新项目&#xff0c;选择asp.net web应用程序。选择如下项目类型 选择项目名字和路径创建 添加ashx&#xff0c;一般处理程序 鼠标右键项目》添加》新建项》常规》一般处理程序 点击添加后自动生成 Handler1.ashx文件和代码&#xff0c;运行项目后访…

android studio 2.0 preview遇到的坑

为什么80%的码农都做不了架构师&#xff1f;>>> 使用android studio&#xff0c;本想体验一把官方声称的instant run特性&#xff0c;结果发现了个大坑&#xff0c;遇到的同志们要小心了 Android Studio 2.0 Preview 发布&#xff0c;此版本最重要的两个更新是&…

angular2通过路由进行组件间传值

一、传参 在传值组件component.ts的constructor函数里面先声明router&#xff1a; import { Router} from angular/router;constructor( public router: Router, ) {} 1.routerLink 单一参数&#xff1a;在<a routerLink["/exampledetail",id]></a>中…

设计数据库:一条记录/一篇文章/一篇日志 关联存储多张图片

我们知道在项目中经常要在一些字段中存储图片。比如说存储用户信息时可能需要保存用户头像图片&#xff08;一般为url&#xff09;。或者数据库中有一个“日志”实体&#xff0c;“日志”表中需要一个图片字段来存储图片&#xff08;一般为url&#xff09;。 但是如果 一个实体…

eclipse-ee + tomcat8.0.29 + struts2.3.24配置

2019独角兽企业重金招聘Python工程师标准>>> web开发可以用myeclipse和eclipse&#xff0c;个人更编好免费的eclipse&#xff0c;eclipse有很多版本ee,se,android,pyton,php的版本&#xff0c; 1。。。下载地址&#xff1a;http://www.eclipse.org/downloads/ 前提…

根据mpArea和mpPerimeter生成区图层实际面积

在区图层属性结构字段新建一个面积字段&#xff0c;类型为双精度型 在“工具”–>“属性汇总“中选择数据&#xff08;图层&#xff09; 选择后打开&#xff0c;在”运算“那一项中选择”实地面积“&#xff0c;在字段中会出现刚刚创建的面积字段&#xff0c;点击”执行“则…

Vue+ElementUI实现input框模糊查询提醒

先是用了ElementUI中给的el-autocomplete例子&#xff1a; <el-autocompleteclass"inline-input"v-model"inputName":fetch-suggestions"querySearch"placeholder"请输入内容" ></el-autocomplete> querySearch是这样定…