原生Ajax五个基本步骤以及使用

本文介绍了AJAX技术的基本概念及其运行原理。详细阐述了使用原生Ajax实现客户端与服务器交互的五个基本步骤,包括创建对象、设置请求参数、发送数据等,并提供了一个简单的HTML示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AJAX的概念

AJAX的全称是Asynchronous JavaScript And XML(异步的JS和XML),说明当初这门技术设想的最佳拍档是JS和XML,但是后来的发展过程中,以js对象为模板的json成为了主流。

Ajax运行原理

在这里插入图片描述

原生Ajax五个基本步骤

1、创建ajax对象
var xhr = new XMLHttpRequest();

2、用ajax对象的open方法设置连接服务器的参数
xhr.open( method,url,async);
method:请求类型,post或get
url:请求文件的具体地址
async::是否异步(true为异步,false为同步)

3、设置发送数据的头部,一般用来说明数据格式,如:
xhr.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
注: multipart/form-data(一般在发送文件时使用,以二进制形式发送)和application/json(发送json格式数据)

4、发送请求,xhr.send(数据)
方法参数中get方法时添null或不添,推荐用post方法

5、判断通讯状态或接收返回数据,这个是写在第三个步骤回调函数里边的

xhr.onreadystatechange()方法和readyState属性。
每次readyState属性发生变化的时候就会触发onreadystatechange事件。
readyState属性的变化也就是XMLHttpRequest对象请求状态的变化。
status
xmlHttp.onreadystatechange = function(){
            //判断数据是否正常返回
            if(xmlHttp.readyState==4&&xmlHttp.status==200){
                //6.接收数据
                var res = eval('('+xmlHttp.responseText+')');
                console.log(res);
}
}

在这里插入图片描述

当xhr.readyState4&&xht.status200
时,通过xhr.responseText可获取发送过来的数据。

实例

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<div id="span1">
    
</div>
</body>
</html>

<script type="text/javascript">
	window.onload = function() {
		//1、创建ajax对象
		var xhr = new XMLHttpRequest();
		// 2、绑定监听--监听服务器是否已经返回对应数据(回调函数)
		xhr.onreadystatechange=function () {
            alert(xhr.readyState);
		if(xhr.readyState==4&&xhr.status==200){
                    //5、判断通讯状态或接收返回数据,这个是写在第三个步骤回调函数里边的
                    var res=xhr.responseText;
                    document.getElementById("span1").innerHTML=res;
                }
        }
        //3、绑定地址,及配置其他参数
        xhr.open("POST","./ajax.php",true);
        //4、发送请求
        xhr.send();        
	}
</script>

使用


$.ajax({
    url:"http://www.microsoft.com",    //请求的url地址
    dataType:"json",   //返回格式为json
    async:true,//请求是否异步,默认为异步,这也是ajax重要特性
    data:{"id":"value"},    //参数值
    type:"POST",   //请求方式
    beforeSend:function(){
        //请求前的处理
    },
    success:function(req){
        //请求成功时处理
    },
    complete:function(){
        //请求完成的处理
    },
    error:function(){
        //请求出错处理
    }
});

<think>好的,我现在需要帮助用户了解如何用原生JavaScript实现Ajax请求的详细步骤。首先,我应该回忆一下自己之前学过的相关知识,或者查阅资料确保步骤正确。根据用户提供的引用内容,尤其是引用[1]到[4],里面提到了创建XMLHttpRequest对象、设置请求、处理响应等步骤。我需要把这些步骤整理出来,确保每个环节都清晰明了。 首先,第一步是创建XMLHttpRequest对象。这应该是所有Ajax请求的基础,不同的浏览器可能有不同的实现方式,比如旧版IE可能需要ActiveXObject,但现在大多数浏览器都支持XMLHttpRequest。所以需要先判断是否存在XMLHttpRequest,如果不存在则用ActiveXObject,不过现在可能不需要考虑太多兼容性问题了,用户可能更关心标准做法。 接下来是设置请求方法和URL。这里用户可能需要知道如何指定GET或POST方法,以及如何传递参数。比如GET请求的参数通常附加在URL后面,而POST请求的参数则在send方法中发送。需要区分这两种方法的处理方式。 然后,设置请求头。比如POST请求需要设置Content-Type,常见的是application/x-www-form-urlencoded或者multipart/form-data,也可能是JSON格式。这里要根据不同的情况设置正确的请求头,特别是当后端需要特定的Content-Type时,这一步很重要。 处理响应部分需要设置onreadystatechange事件处理函数,当readyState改变时触发。readyState的值从0到4,4表示请求完成。同时需要检查status是否为200,表示成功响应。这时候可以获取responseText或responseXML来处理返回的数据。 发送请求的时候,如果是GET,send方法通常不传参数或者传null,参数在URL里。POST的话,参数需要格式化后作为send的参数发送,比如键值对用&连接,或者JSON字符串。 另外,用户可能还需要了解如何处理异步请求,同步请求虽然存在,但一般不推荐使用,因为会阻塞页面。此外,错误处理也是重要的一环,比如网络错误、超时、服务器返回错误状态码等情况,应该如何处理。引用[3]提到了处理错误和超时,可能需要补充这部分内容。 另外,用户的问题中引用了四个参考资料,我需要确保在回答中正确引用这些资料,比如在步骤末尾加上对应的引用标记。例如,创建XMLHttpRequest对象的部分引用[1]和[2],处理响应引用[3],设置请求头引用[4]等。 在整理步骤时,需要注意使用中文,并且数学表达式或代码部分用正确的格式。例如,代码块应该用反引号包裹,并标明语言类型。比如示例中的Python代码块,这里应该用JavaScript的代码块。 最后,生成相关问题,这部分需要根据用户可能进一步想了解的内容来提问,比如步骤的具体细节、错误处理、现代替代方法(如Fetch API)、参数格式化方法等。 现在,我需要把这些思考整理成一个结构清晰的回答,分步骤说明,并附上代码示例,确保每个步骤都有对应的解释和引用。同时,检查是否有遗漏的步骤,比如是否要处理超时或者错误,根据引用[3]的内容,可能需要提到这些,但示例中没有详细展开,所以可以简要提及,或者放在相关问题里。 另外,用户可能对同步和异步的区别有疑问,虽然示例中使用的是异步,但可能需要说明open方法的第三个参数是async,默认true,即异步。如果需要同步,设为false,但不推荐。 总结步骤: 1. 创建XMLHttpRequest对象 2. 配置请求参数(open方法) 3. 设置请求头(可选,根据请求类型) 4. 定义响应处理函数(onreadystatechange) 5. 发送请求(send方法) 6. 错误处理(onerror,超时等) 在代码示例中,要展示GET和POST的例子,因为用户可能需要两者。同时,参数的处理方式不同,需要分别说明。 现在开始编写回答,确保每个步骤都有对应的引用,语言简洁明了,结构清晰,代码正确无误。</think>### 如何用原生JavaScript实现AJAX请求的详细步骤 #### 1. 创建XMLHttpRequest对象 使用`XMLHttpRequest`构造函数创建请求对象。旧版IE(IE5/6)需用`ActiveXObject("Microsoft.XMLHTTP")`,但现代浏览器已统一支持标准方式[^1][^2]。 ```javascript const xhr = new XMLHttpRequest(); ``` #### 2. 配置请求方法和URL 通过`open()`方法指定请求类型(GET/POST)和目标URL。 - **GET请求**参数需拼接在URL后: ```javascript xhr.open('GET', '/api/data?name=John&age=20', true); // 第三个参数为true表示异步 ``` - **POST请求**参数通过`send()`发送: ```javascript xhr.open('POST', '/api/submit', true); ``` #### 3. 设置请求头(可选) 对POST请求,通常需要设置`Content-Type`头部,例如表单格式或JSON格式[^4]: ```javascript xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 或 JSON格式 xhr.setRequestHeader('Content-Type', 'application/json'); ``` #### 4. 定义响应处理函数 通过`onreadystatechange`事件监听请求状态变化。当`readyState`为4(请求完成)且`status`为200(成功)时处理返回数据[^3]: ```javascript xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { console.log('响应数据:', xhr.responseText); } else { console.error('请求失败,状态码:', xhr.status); } } }; ``` #### 5. 发送请求 - **GET请求**直接调用`send()`: ```javascript xhr.send(); ``` - **POST请求**需传递格式化参数: ```javascript const params = 'name=John&age=20'; // 键值对格式 // 或JSON格式 const params = JSON.stringify({ name: 'John', age: 20 }); xhr.send(params); ``` #### 6. 错误处理(可选) 添加网络错误和超时处理: ```javascript xhr.onerror = function() { console.error('网络错误'); }; xhr.timeout = 5000; // 设置超时时间(毫秒) xhr.ontimeout = function() { console.error('请求超时'); }; ``` ### 完整示例(POST请求) ```javascript const xhr = new XMLHttpRequest(); xhr.open('POST', '/api/submit', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { console.log('成功:', JSON.parse(xhr.responseText)); } else { console.error('错误:', xhr.statusText); } } }; xhr.send(JSON.stringify({ username: 'admin', password: '123456' })); ``` ### 注意事项 - **同步与异步**:`open()`第三个参数默认为`true`(异步),设为`false`会阻塞页面,不推荐使用。 - **兼容性**:若需支持旧版IE,需做兼容判断,但现代开发中已极少需要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值