js学习7(原生Ajax)

简要

Ajax:Asynchronic JavaScript And XML,翻译为“异步的JS和XML”,用于向服务端发送异步请求从而局部更新页面的技术(无需重新请求加载页面,即可实现页面动态更新)

原生JS实现

### 两种实现方法:

XMLHttpResquest、fetch

 

## XMLHttpResquest:

new XMLHttpRequest()

xhr.onload = success_callback【this.responseText】

xhr.onerror = error_callback

xhr.open(mehtod,url)

xhr.send([data])

 

## fetch

fetch(url,[option_obj]) => Promise对象

options:method、body、headers等等

 

 

### JSON:

Ajax实现请求与响应通信的数据格式称为JSON

 

## JS中支持JSON化的数据类型

字符串、对象、数组

 

## JSON化的规范

要求数据为纯数据格式,不能包含属性和方法;

对象的属性和值必须使用双引号包裹(不能不包裹或者使用单引号包裹);

 

## JS实现JSON化的相关方法

解析JSON为JS数据:JSON.parse(JSON数据)

JS数据转换为JSON:JSON.stringify(对象/数据/字符串)

 

 

### MIME类型

响应头的Content-Type项反馈给浏览器当前媒体文件或内容的类型;

JSON数据对应的MIME类型为:application/json

MIME 类型 | 菜鸟教程 (runoob.com)

 XMLHttpRequest实现

### 前言:

(1)需要使用两个侦听器来处理响应结果,即onload和onerror;

(2)需要JSON化数据和解析JSON数据;

 

 

### get请求:

// 1. 创建对象

var xhr = XMLHttpRequest();

// 2. 定义侦听器的回调函数

// 请求成功回调函数

function success_callback(){

        var data = JSON.parse(this.responseText);  // 获取响应数据并解析

};

// 请求失败回调函数

function error_callback(err){

        console.log(err);

};

// 3. 侦听器监听处理

xhr.onload = success_callback;

xhr.onerror = error_callback;

// 4. 发送请求
xhr.open('GET',url_str)

xhr.send();

 

 

### post请求:

与get请求不同的是,post请求还会发送数据给服务器,而且post数据是在请求体中的;

所以需要设置请求时响应后的头部选项Content-Type,使被浏览器正确解析;

// 发送请求,省略其他步骤(同get请求)

xhr.open('POST',url_str);

xhr.setRequestHeader("Content-Type","application/json;charset=UTF-8"); 

xhr.send(json.stringify({'data1':'value1','data2':100}))

fetch实现 

### 前言:

(1)返回Promise对象,使用Promise对象的then和catch来处理响应结果;

(2)第一个then接受的是响应完成的Response对象,我们应该json化处理然后在第二个then中再获取服务器传来的数据;

(3)即使请求错误,fetch方法执行后还是会执行then方法,then中出错后被catch捕获并处理,所以如果想要请求响应错误时不让其执行then,需要首先使用then捕获响应异常;

 

 

 

### get请求

var ftest = fetch(url_str)

.then(resp=>resp.json())

.then(data=>console.log(data))

.catch(err=>console.log(err))

 

# 处理响应异常

var ftest = fetch(url_str)

.then(respOk)    // 先看是否成功响应

.then(resp=>resp.json())

.then(data=>console.log(data))

.catch(err=>console.log(err))

 

function respOk(resp){

        if (!resp.ok){

                throw Error(resp.statusText);

        }else{

                return resp;

        }

}

 

 

### post请求:

var ftest = fetch(url_str,{

        method:'POST',

        body:JSON.stringify({...}),

        headers:{

                "Content-Type":"application/json;UTF-8"

        },

})

.then(respOk)    // 先看是否成功响应

.then(resp=>resp.json())

.then(data=>console.log(data))

.catch(err=>console.log(err))

 

function respOk(resp){

        if (!resp.ok){

                throw Error(resp.statusText);

        }else{

                return resp;

        }

}

总结

1. XMLHttpRequest方式需要用到两个侦听器,而fetch方式返回的是Promise对象(需要先处理响应错误和转换响应数据再获取数据)

2. post请求需要传入并JSON化数据,并设置响应头的Content-Type项为application/json

3. 两种方式都要用到JSON来处理数据(解析和JSON化)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: var xhr = new XMLHttpRequest(); xhr.open("GET", "https://example.com/ajax_info.php", true); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { // 执行完成 if (xhr.status == 200) { // 正常响应 // 请求结果在 xhr.responseText 中 } } }; xhr.send(); ### 回答2: 原生ajax请求可以通过JavaScript代码来实现。以下是一个简单的示例: ```javascript // 创建一个XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 设置请求的方法和URL xhr.open('GET', 'https://api.example.com/data', true); // 监听请求的状态变化 xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 请求成功,处理返回的数据 var response = JSON.parse(xhr.responseText); console.log(response); } }; // 发送请求 xhr.send(); ``` 在这个示例中,我们首先通过`XMLHttpRequest`构造函数创建一个`xhr`对象。然后,使用`open`方法设置请求的方法(这里是GET请求)和URL(这里是示例的API地址)。接下来,我们通过`onreadystatechange`事件监听请求的状态变化。当`readyState`变为`4`,同时`status`为`200`时,表示请求成功并返回了响应数据。我们可以通过`responseText`属性获取响应的文本数据,并使用`JSON.parse`将其解析为JavaScript对象。最后,在请求的处理函数中,我们可以对数据进行相应的处理,这里只是简单地打印到控制台。 通过以上代码,我们成功使用原生的ajax请求获取了服务器返回的数据。当然,根据具体的情况,我们也可以通过`open`方法设置请求的其他参数,如请求方式、请求头等,在`send`方法中发送请求的数据体等。 ### 回答3: 使用原生的JavaScript代码实现Ajax请求可以通过创建XMLHttpRequest对象来实现。以下是一个简单的示例: ```javascript // 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 监听请求状态变化 xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 请求成功,处理响应数据 var responseData = xhr.responseText; console.log(responseData); } else { // 请求失败或正在处理中 console.log('请求失败'); } }; // 发送请求 xhr.open('GET', 'https://api.example.com/data', true); // 设置请求方式、请求地址、是否异步 xhr.send(); ``` 在这个示例中,我们首先创建了一个名为xhr的XMLHttpRequest对象。然后,我们通过调用`open`方法设置请求方式(GET或POST)、请求地址和是否异步(true表示异步,false表示同步)。 然后,我们通过调用`send`方法发送请求。一旦发送请求,我们可以通过监听`onreadystatechange`事件来检测请求的状态。当`readyState`等于4且`status`等于200时,表示请求成功,我们可以处理响应数据。在这个示例中,我们只是简单地通过输出到控制台来展示响应数据。 当`readyState`并非4或`status`不等于200时,表示请求失败或正在处理中。在这个示例中,我们只是简单地通过输出到控制台来显示请求失败的信息。 这是一个最简单的使用原生JavaScript实现Ajax请求的示例。根据实际需求,您可能需要添加更多的逻辑来处理请求头部、请求参数、错误处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值