javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】

yizhihongxing

下面是关于“javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】”的完整攻略:

AJAX简介

AJAX(Asynchronous JavaScript and XML)指的是利用JavaScript在不刷新整个页面的情况下向服务器发送请求和获取响应数据,在前端页面进行异步数据交互的技术。

AJAX 的优点有:用户体验好,可以实现页面的局部刷新,减少不必要的服务器请求。

XMLHttpRequest对象

在JavaScript中可以通过XMLHttpRequest对象来实现对服务器资源的请求。

XMLHttpRequest对象的主要方法和属性:

属性

  • readyState:存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。0: 请求未初始化,1: 服务器连接已建立,2: 请求已接收,3: 请求处理中,4: 请求已完成,且响应已就绪。
  • status:HTTP状态码。200表示请求成功;400表示请求出现了问题;500表示服务器错误。
  • responseText:响应返回的文本。
  • responseXML:响应的 XML 文档。

方法

  • open(method,url,async): method: 请求的类型;url: 请求的 URL;async: true(异步)或 false(同步)。
  • send(string): 将请求发送到服务器。string 仅用于 POST 请求。

jQuery 中的AJAX

在jQuery中,使用 $.ajax方法来实现AJAX请求。

$.ajax()的方法构造如下:

    $.ajax({
        url: '请求地址',
        type: 'GET/POST',
        data: '发送数据',
        dataType: '返回数据的格式(text/xml/json等)',
        success: function(data){
            //响应成功后的回调函数
        },
        error: function(xhr, status, error){
            //失败时的回调函数
        }
    });

下面是一个利用jQuery实现AJAX请求的示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AJAX request with jQuery</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
    <h1>Welcome to AJAX with jQuery</h1>
    <button id="btn-click">Click for AJAX</button>

    <script>
        $(document).ready(function(){
            $("#btn-click").click(function(){
                $.ajax({
                    url: "https://api.coindesk.com/v1/bpi/currentprice.json",
                    dataType: "json",
                    success: function(data){
                        console.log(data);
                        alert("Current Bitcoin price: " + data.bpi.USD.rate + " USD");
                    }
                });
            });
        });
    </script>
</body>
</html>

在这个例子中,我们使用了$.ajax来请求 CoinDesk API获取了最新的比特币价格。在成功回调函数中,我们将当前比特币价格打印到控制台,并用一个弹窗来显示当前的美元价格。

AJAX跨域问题

XHR限制了AJAX只能在相同的域名下进行请求,如果要请求一个不同域名下的资源需要解决跨域问题。常见的解决跨域问题的方案如下:

JSONP

JSONP 是最常用的跨域技术,利用script标签完成跨域。常规情况下,script标签引用的是静态资源,如jquery.js等,但也可以引用包含一个callback参数的url来请求动态数据。服务器解析后将数据以函数参数形式返回,从而实现跨域。

下面是一个 JSONP 的示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AJAX request with JSONP</title>
</head>
<body>
    <h1>Welcome to AJAX with JSONP</h1>
    <button id="btn-click">Click for JSONP</button>

    <script>
        function jsonpCallback(data){
            console.log(data);
            alert("Current Bitcoin price: " + data.bpi.USD.rate + " USD");
        }

        function loadJSONP(){
            let script = document.createElement('script');
            script.type = "text/javascript";
            script.src = "https://api.coindesk.com/v1/bpi/currentprice.json?callback=jsonpCallback";
            document.getElementsByTagName('head')[0].appendChild(script);
        }

        document.getElementById("btn-click").addEventListener("click", function(){
            loadJSONP();
        });
    </script>
</body>
</html>

在上面的例子中,我们改变了jQuery例子中的$.ajax方法,并使用了一个特殊的URL,其中包含一个“callback”参数,指向一个在JavaScript文件内的全局函数。服务器端需要解析这个参数,并将数据返回给这个全局函数的参数中。

CORS

对于IE10及以上版本,Chrome、Firefox和Safari等浏览器都支持CORS(Cross-Origin Resource Sharing)技术。CORS是一种官方的跨域请求解决方案,需要在服务器中配置相关的响应头信息。

    response.setHeader("Access-Control-Allow-Origin", "http://localhost:8081");
    response.setHeader("Access-Control-Allow-Methods", "GET,POST");
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");

其中,"Access-Control-Allow-Origin"允许访问该资源的制定域名;"Access-Control-Allow-Methods"允许访问该资源的请求方法;"Access-Control-Allow-Headers"允许访问该资源的请求头信息。

在前端使用AJAX时,需要将xhr.withCredentials属性设为true,这样才能在请求中发送Cookies等用户认证凭据等信息。

下面是一个使用CORS实现AJAX跨域的示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AJAX with CORS</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
    <h1>Welcome to CORS AJAX Request</h1>
    <button id="btn-click">Click for Cookies</button>

    <script>
        $(document).ready(function(){
            $("#btn-click").click(function(){
                $.ajax({
                    url: "http://localhost:8080",
                    type: "GET",
                    xhrFields: { withCredentials: true },
                    crossDomain: true,
                    success: function(data){
                        console.log(data);
                        alert("Server said: " + data.msg);
                    }
                });
            });
        });
    </script>
</body>
</html>

在这个例子中,我们通过将xhr.withCredentials属性设为true告诉浏览器,我们打算接收来自其他域的Cookies,并且通过crossDomain属性告诉jQuery这是一个跨域请求。服务器端设置了跨域策略允许了该资源的访问,其中"Access-Control-Allow-Origin"允许所有域名访问该资源,"Access-Control-Allow-Credentials"允许跨域请求携带cookie。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)

    下面我将为大家讲解“node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)”的完整攻略。 什么是node.js基于cheerio的爬虫工具? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,可以在服务器端运行 JavaScript 代码。Cheerio 是 Node.js 中一个非常流行的小型解…

    node js 2023年6月9日
    00
  • 详解JWT与Token的应用与原理

    详解JWT与Token的应用与原理 什么是JWT JWT(JSON Web Token)是一种用于网络通信的协议,主要用来在网络应用之间传递认证及授权数据。JWT 将用户信息进行编码,形成一个字符串并将其发送到客户端,在客户端需要访问受保护的资源时,将其发送回服务器进行验证。JWT 是有状态的,因为其中包含了用户的信息,而服务器在解析 Token 时,会将其…

    node js 2023年6月8日
    00
  • Node.js中常规的文件操作总结

    下面我将为你详细讲解“Node.js中常规的文件操作总结”的完整攻略。 1. 文件操作方法 Node.js中提供了一系列的文件操作方法,常用的有以下几种: 1.1 fs.access(path[, mode], callback) 用于检查文件或目录是否可访问。 const fs = require(‘fs’); fs.access(‘/path/to/fi…

    node js 2023年6月8日
    00
  • JavaScript中匿名函数的递归调用

    JavaScript中匿名函数的递归调用是一种常见的编程技巧。本文将介绍如何编写并理解匿名函数的递归调用。 什么是匿名函数 在JavaScript中,函数可以有名字,也可以没有名字。没有名字的函数被称为匿名函数。匿名函数可以像普通函数一样被调用和传递。 以下代码展示了一个匿名函数的例子: (function() { console.log(‘Hello Wo…

    node js 2023年6月8日
    00
  • WebStorm 发布2021.3重大更新新功能介绍

    WebStorm 发布2021.3重大更新新功能介绍 WebStorm 已经发布了 2021.3 的重大更新版本,并且增加了许多强大的新功能,本文将详细介绍这些新功能以及如何使用它们。 1. 在 JS/TS 模板文字中使用虚拟变量 新版本的 WebStorm 已经支持在 JavaScript 和 TypeScript 的模板文字中使用虚拟变量。这样可以使代码…

    node js 2023年6月8日
    00
  • 详解CocosCreator系统事件是怎么产生及触发的

    CocosCreator是一款常用的游戏开发引擎,其中系统事件在游戏开发中起着非常重要的作用。本文将详细讲解CocosCreator系统事件是怎么产生及触发的,帮助开发者更好地理解和掌握CocosCreator的事件系统。 什么是系统事件 在CocosCreator中,事件是指由引擎或用户发起的一种通信方式。当某些事情发生时,可以通过事件来通知其他需要知道的…

    node js 2023年6月8日
    00
  • js实现遍历含有input的table实例

    实现表格中input元素的遍历,可以使用JavaScript DOM API完成。DOM API是JavaScript操作HTML结构中的内容的方法和属性集合。以下是几个实现遍历含有input的table的示例: 方法一:使用querySelectorAll 可以使用 document.querySelectorAll() 方法查找表格中的所有 input …

    node js 2023年6月8日
    00
  • Node.js中文件操作模块File System的详细介绍

    Node.js中文件操作模块File System的详细介绍 Node.js的核心模块之一是File System模块,也称为fs模块。它提供了一系列文件和目录的处理方法,可以读取、写入、重命名、复制和删除文件等。在这篇攻略中,我们将深入了解如何使用File System模块。 文件的读取和写入 1. 读取文件 通过fs.readFile方法可以读取一个文件…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部