原生js的ajax和解决跨域的jsonp(实例讲解)

关于原生JS的AJAX和JSONP的介绍和实例讲解,我将从以下三个部分来进行详细解答。

  1. AJAX的介绍和使用方法

AJAX全称为Asynchronous JavaScript and XML(异步的JavaScript和XML),是一种前端常用数据交换技术,能够实现页面异步刷新,避免了页面重新刷新的效果,减轻服务器对请求的压力。使用AJAX技术可以更好的优化用户体验。

AJAX的核心思路是XMLHttpRequest对象及其API,XMLHttpRequest可以在后台与服务器进行数据交换,无需刷新整个页面。在JS中,通过创建XMLHttpRequest对象来发送HTTP请求和接收HTTP响应。基本使用方法如下:

let xhr = new XMLHttpRequest(); //创建XMLHttpRequest对象
xhr.open("GET/POST", url, async); //初始化请求
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //设置请求头
xhr.onreadystatechange = function() { //回调函数
    if (xhr.readyState === 4 && xhr.status === 200) {
        console.log(xhr.responseText);
    }
};
xhr.send(data); //发送请求

其中,open()方法用于初始化请求,第一个参数是请求的方法,一般是GET和POST,第二个参数为请求的URL,第三个参数表示是否为异步请求。

setRequestHeader()方法用于设置请求头内容,例如Content-Type等HTTP信息。

onreadystatechange是回调函数,当readyState属性发生变化时,该函数被触发。当readyState为4,而status为200时,表示响应已经就绪,数据也已经成功响应。

send()方法用于向服务器发送请求,参数为要发送的数据。

  1. JSONP的介绍和使用方法

JSONP全称是JSON with Padding(含跨域回调的JSON),是解决跨域问题的一种方案,常用于前端与不能CORS的服务器进行数据交换。

JSONP的本质是通过<script>标签的跨域特性实现的。由于<script>标签不受同源策略影响,因此在前端页面中可以动态生成<script>标签,并通过它将一段JS代码插入到当前页面中执行。

JSONP的实现过程中,于服务器端约定一个回调函数,前端通过设置该函数的名称权当做参数传给服务器,服务器在接收到请求后会将JSON数据作为传递给该函数并作为字符串返回给前端。前端页面接收到该字符串后,自动将其当做JS脚本执行,从而达到了跨域获取数据的目的。

JSONP的基本使用方法如下:

function jsonp(url, cb) {
    let script = document.createElement('script');
    script.src = url + '&callback=' + cb;
    document.head.appendChild(script);
}

jsonp('https://www.example.com/data', 'handleData');

function handleData(data) {
    console.log(data);
}

上述代码中,jsonp()函数用于生成请求地址和动态插入<script>标签,接收两个参数:跨域请求URL和回调函数名称。请求URL中将callback参数设置为我们约定的回调函数名称,由于请求的数据不在JS脚本之中,请求时只能使用GET请求。

  1. 实例讲解

(1)AJAX示例

当用户在页面上输入关键字搜索时,我们要用AJAX向后端请求相关数据,通过搜索的结果,更新当前页面的内容。示例代码如下:

HTML:

<input type="text" id="search">
<button id="btn">搜索</button>
<div id="result"></div>

JS:

const search = document.querySelector('#search');
const btn = document.querySelector('#btn');
const result = document.querySelector('#result');
let xhr = null;
btn.addEventListener('click', function() {
    let keyWords = search.value.trim();
    if (keyWords === '') {
        return alert('请输入查询关键字!');
    }
    if (xhr !== null) {
        xhr.abort(); //中断上次的请求
    }
    xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
            result.innerHTML = xhr.responseText;
        }
    };
    xhr.open('GET', 'http://www.example.com/search?keyWords=' + encodeURIComponent(keyWords), true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send(null);
});

这个示例通过监听click事件实现关键字搜索,点击按钮时通过AJAX向服务器请求数据,并更新页面内容。

(2)JSONP示例

假设我们要跨域获取github用户信息,我们可以利用github提供的API接口实现,该API允许我们通过callback参数设置回调函数,并返回JSONP格式的数据,示例代码如下:

JS:

function jsonp(url, cb) {
    let script = document.createElement('script');
    script.src = url + '&callback=' + cb;
    document.head.appendChild(script);
}
let user = document.querySelector('#user');
let btn = document.querySelector('#btn');

btn.addEventListener('click', function() {
    let username = user.value.trim();
    if (username === '') {
        return alert('请输入Github用户名!');
    }
    jsonp(`https://api.github.com/users/${username}`, 'handleData');
});

function handleData(data) {
    console.log(data);
    alert(`用户名: ${data.login}\n姓名: ${data.name}\nBlog: ${data.blog}\nFollowers: ${data.followers}`);
}

这个示例通过监听click事件实现了跨域获取github用户信息,通过设置URL和回调函数名称实现AJAX获取数据。获取到数据后通过处理函数处理返回的结果,并弹窗显示。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js的ajax和解决跨域的jsonp(实例讲解) - Python技术站

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

相关文章

  • javascript中parseInt()函数的定义和用法分析

    下面我就来为你介绍一下JavaScript中parseInt()函数的定义和用法分析。 1. 定义 parseInt()是JavaScript中的一个全局函数,用于将字符串解析成整数。该函数接收两个参数:要转换为整数的字符串和一个可选的进制数,表示要解析的字符串是几进制的。如果不提供进制数,则默认采用十进制。 2. 用法分析 2.1 解析十进制 下面是一个解…

    JavaScript 2023年5月27日
    00
  • javascript 流畅动画实现原理

    JavaScript 实现流畅动画的原理是通过不断地更新元素的位置或样式来实现视觉上的连续性,使元素看起来像是在不断地移动或变化。 常见的实现流畅动画的方式是通过 setInterval 或 requestAnimationFrame 不断地调用函数,来更新元素的位置或样式。在函数中,可以通过改变元素的 CSS 属性,来实现实时更新元素的效果。 其中,使用 …

    JavaScript 2023年6月10日
    00
  • 深入解析Java设计模式编程中观察者模式的运用

    深入解析Java设计模式编程中观察者模式的运用 观察者模式是一种经典的设计模式,它能够实现对象之间的一对多依赖关系。当一个对象状态发生改变时,其所有关联对象都能够收到通知并自动更新。 观察者模式的定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象的状态发生变化时,所有的观察者对象都能够收到通知并自动更新。 观察者模…

    JavaScript 2023年5月28日
    00
  • 原生JS实现多条件筛选

    原生JS实现多条件筛选的完整攻略如下: 1. HTML结构 首先,我们需要搭建HTML结构,例如: <div> <label for="input1">条件1:</label> <input type="text" id="input1"> </…

    JavaScript 2023年6月11日
    00
  • Javascript Math E 属性

    JavaScript中的Math.E属性是一个常数,表示自然对数的底数e。以下是关于Math.E属性的完整攻略,包括两个示例。 JavaScript Math对象的E属性 JavaScript Math对象的E属性是一个常数,表示自然对数的底数e。 下面是E属性的语法: Math.E ` 下面是一个`E`属性的示例: “`javascript consol…

    JavaScript 2023年5月11日
    00
  • 动态加载JS文件的三种方法

    下面是详细讲解“动态加载JS文件的三种方法”的完整攻略。 引言 在网站开发中,动态加载JS文件是一个很常见的需求。因为动态加载JS文件可以让网页更加灵活,可以根据特定条件来加载特定JS文件,从而避免不必要的JS文件加载和性能消耗。在本文中,我们将介绍动态加载JS文件的三种方法。 方法一:createElement() 方法 createElement() 方…

    JavaScript 2023年5月27日
    00
  • Javascript调试脚本的经验之谈第2/2页

    下面是关于“JavaScript调试脚本的经验之谈”的完整攻略。 第一步:使用控制台 控制台是JavaScript调试中最重要的工具之一。可以通过在控制台中打印信息、执行代码、查看对象属性等方式来找到代码问题。 在控制台中可以使用以下方法进行调试: 1. console.log()方法 console.log()方法是JavaScript中使用最广泛的输出调…

    JavaScript 2023年6月1日
    00
  • 关于JavaScript的内存与性能问题解决汇总

    JavaScript内存与性能问题解决汇总 在Web开发中,优化JavaScript的内存与性能通常是开发者需要面对的挑战之一。本文将从两个方面进行探讨,分别是JavaScript内存管理以及性能调优。 JavaScript内存管理 自动垃圾回收(Garbage Collection) JavaScript是一种高级语言,在执行过程中会自动进行内存分配和回收…

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