基于ajax和jsonp的原生封装(实例)

我来详细讲解“基于ajax和jsonp的原生封装(实例)”的完整攻略。

什么是AJAX和JSONP?

AJAX是Asynchronous JavaScript and XML(异步的JavaScript和XML)的缩写,指的是一种在不重新加载整个页面的情况下,通过JavaScript进行局部刷新的技术。AJAX可以实现异步请求后端数据,在不影响页面正常操作的情况下,动态刷新页面内容,提升用户的交互体验。

JSONP是JavaScript Object Notation with Padding(使用填充的JavaScript对象表示法),是一种使用JSON格式的数据交换方式。由于浏览器的同源策略限制,我们不能跨域请求非本站的后端数据,而JSONP利用的是动态创建script标签,不受同源策略限制,可以跨域请求数据。JSONP的原理是通过动态创建script标签,将请求的接口及参数作为src的查询字符串传入,后端返回的数据是一段可执行的JavaScript代码,该代码会被自动执行,从而实现了跨域获取数据。

封装AJAX方法

下面,我们来封装一下基于AJAX的GET和POST请求方法。这里的代码示例是基于ES6的语法编写的。

// 封装GET方法
function ajaxGet(url, callback){
  const xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);
  xhr.onreadystatechange = function(){
    if(xhr.readyState === 4 && xhr.status === 200){
        callback(JSON.parse(xhr.responseText));
    }
  };
  xhr.send();
}

// 封装POST方法
function ajaxPost(url, data, callback){
  const xhr = new XMLHttpRequest();
  xhr.open('POST', url, true);
  xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
  xhr.onreadystatechange = function(){
    if(xhr.readyState === 4 && xhr.status === 200){
        callback(JSON.parse(xhr.responseText));
    }
  };
  xhr.send(JSON.stringify(data));
}

代码解析:
- ajaxGet函数接收两个参数:url为请求的接口地址,callback为请求成功后的回调函数。
- ajaxPost函数接收三个参数:url为请求的接口地址,data为请求参数,callback为请求成功后的回调函数。其中data是一个对象,需要用JSON.stringify方法将其转换成字符串。
- 通过XMLHttpRequest对象发送请求。
- readyState为4时表示请求已成功处理。
- status为200时表示请求已成功响应。

封装JSONP方法

接下来,我们来封装一个基于JSONP的方法。

function jsonp(url, options) {
    //创建script标签
    let script = document.createElement('script');
    let callback;
    //格式化options,将其转换成queryString
    options = options || {};
    options.callback = options.callback || ('jsonp_' + Date.now() + '_' + Math.random().toString().substr(2));
    let params = [];
    for(let key in options) {
        params.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));
    }
    //将params数组用&连接成queryString
    let queryString = params.join('&');
    url = url + '?' + queryString;
    script.setAttribute('src', url);
    document.head.appendChild(script);

    return new Promise((resolve) => {
        //定义callback函数,并将数据resolve出去
        window[options.callback] = function (data) {
            resolve(data);
        };
        //当script标签加载完成时,移除script标签并删除callback函数
        script.onload = () => {
            document.head.removeChild(script);
            delete window[options.callback];
        };
    });
}

代码解析:
- jsonp函数接收2个参数:url为请求的接口地址,options是一个对象,可以指定回调函数、请求的参数等。
- 通过动态创建script标签,并指定接口地址和回调函数名称。
- 将options对象转换成queryString,并拼接到接口地址后面。
- 定义了一个Promise用于处理返回的响应结果。
- 在window对象下定义callback函数,并将响应数据resolve出去。
- 在script标签加载完成后,移除script标签并删除callback函数。

AJAX和JSONP的使用示例

现在我们来使用刚才封装好的方法,发送AJAX和JSONP请求,并在回调函数中输出请求结果。

// 发送AJAX请求并输出响应结果
ajaxGet('https://api.apiopen.top/getJoke?page=1&count=2', function(data){
    console.log(data);
});

// 发送JSONP请求并输出响应结果
jsonp('https://api.apiopen.top/getJoke', {
    page: 1,
    count: 2
}).then(data => {
    console.log(data);
});

代码解析:
- ajaxGet函数中调用了封装好的ajaxGet方法,发送AJAX请求并在回调函数中输出响应结果。
- jsonp函数中调用了封装好的jsonp方法,发送JSONP请求并在Promise中处理响应结果。

本文总结

通过阅读本文,我们了解了AJAX和JSONP的基本原理,同时,我们也学会了如何使用原生的AJAX和JSONP方法封装请求,并且应用到了实例中,并成功发送了请求并获取到响应结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于ajax和jsonp的原生封装(实例) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • js中的string.format函数代码

    下面是详细讲解 JavaScript 中的 string.format 函数的完整攻略。 string.format 函数简介 在 JavaScript 中,我们经常需要将一些变量的值格式化成字符串,这时我们可以使用 string.format 函数来进行格式化,以达到我们想要的结果。string.format 函数可以将一个 JavaScript 字符串模…

    JavaScript 2023年5月28日
    00
  • JavaScript 对象合并的几种方法小结

    针对“JavaScript 对象合并的几种方法小结”,以下是详细的攻略。 什么是JavaScript对象合并 JavaScript对象合并,指的是将两个或多个对象合并成一个新的对象。 在JavaScript中,合并对象是一种常见的操作,它可以将多个对象中的属性和方法合并到一起,以创建一个新的对象,这样我们就可以方便地管理和操作这些属性和方法。 方法1:Obj…

    JavaScript 2023年5月27日
    00
  • asp.net实现删除DataGrid的记录时弹出提示信息

    ASP.NET 是微软公司的一种基于 .NET 框架的服务器端 Web 应用程序开发技术,而 DataGrid 是一个常用的 ASP.NET 控件之一,它能够将数据以表格的形式显示于网页上。通常在进行删除操作时,为了防止误操作和提醒用户删除的数据,我们需要弹出提示对话框。本文将为大家介绍如何实现在删除 DataGrid 中的记录时弹出提示信息。 实现步骤 添…

    JavaScript 2023年6月10日
    00
  • ES6新特性六:promise对象实例详解

    ES6新特性六:promise对象实例详解 Promise对象是ES6新增的一种异步编程解决方案,它解决了异步编程中回调函数嵌套过深、错误处理繁琐等问题。本文将详细介绍Promise对象的创建、状态、方法及使用。 Promise对象的创建 Promise对象是通过new关键字和Promise构造函数创建的,它接受一个函数作为参数,该函数有两个形参resolv…

    JavaScript 2023年6月11日
    00
  • JS超出精度数字问题的解决方法

    以下是关于JS超出精度数字问题的解决方法的完整攻略。 1. 问题背景 在使用JS进行数值运算时,可能会遇到精度丢失的问题,出现类似于以下的情况。 0.1 + 0.2 = 0.30000000000000004 这是因为JS采用64位双精度浮点数来存储数字,而二进制小数无法精确表示一些十进制小数,导致计算精度出现偏差。 2. 解决方法 为了解决这个问题,我们可…

    JavaScript 2023年5月28日
    00
  • Javascript核心读书有感之表达式和运算符

    Javascript核心读书有感之表达式和运算符攻略 表达式和运算符的基本概念 在Javascript中,表达式是由变量、常量、运算符和函数调用等元素组成的组合,用于计算一个值。而运算符则是表达式中完成具体计算的部分。 运算符的分类 Javascript中的运算符可以分为以下几类: 算术运算符 用于数值运算,包括加减乘除、取余等,如:+、-、*、/、%。 示…

    JavaScript 2023年6月11日
    00
  • JSP应用的安全问题

    一、JSP应用的安全问题 JSP(Java Server Pages)被广泛用于构建Web应用程序,但是,与其使用的客户端JavaScript类似,JSP应用程序也面临着多种安全问题。以下是几个可能导致JSP应用程序受到攻击的安全问题: SQL注入攻击 SQL注入攻击是一种利用Web应用程序中的输入验证漏洞来执行恶意SQL语句的攻击。这种攻击可以导致应用程序…

    JavaScript 2023年6月11日
    00
  • javascript ajax的5种状态介绍

    下面来详细讲解“JavaScript Ajax的5种状态介绍”的完整攻略。 什么是Ajax Ajax,全称Asynchronous JavaScript and XML,是指一种创建交互式,动态的Web应用程序的Web开发技术。它使得Web页面和服务器之间异步通信变得更加轻松和高效。 在Web中,Ajax最常用的场景是使用JavaScript进行异步请求并更…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部