ajax与jsonp的区别及用法

当我们需要通过 JavaScript 从服务器获取数据时,可以使用两种方法:Ajax 和 JSONP。这两种方法都能通过异步请求从服务器获取数据。但它们使用的机制和格式都不相同,下面就详细讲解 Ajax 和 JSONP 的区别及用法。

Ajax与JSONP的基本区别

Ajax 和 JSONP 都能够异步请求服务器端数据,但它们的实现机制有所不同。

  1. Ajax

Ajax 即 Asynchronous JavaScript and XML,是一种在不重载整个页面的情况下通过 JavaScript 异步获取数据的技术。Ajax 的请求形式是 XMLHttpRequest 对象请求数据,可以通过 HTTP 协议向服务器请求数据,在不刷新页面的基础上实现数据的动态更新。

  1. JSONP

JSONP(JSON with Padding)是一种跨域访问的技术,允许使用 JavaScript 代码从其它域名(网站)获取数据。JSONP 的请求形式是通过动态生成 script 标签来请求数据,在请求 URL 的参数中携带一个回调函数名称。服务器返回的数据包裹在回调函数中,浏览器在执行 script 标签内的代码时会直接将数据作为参数传入回调函数中。

差别总结:

  • Ajax 请求的数据格式是 XML、JSON、HTML、text,对于同域请求没有限制,但跨域需要加上所谓的CORS请求。
  • JSONP 请求的数据格式只支持 JSON 格式,只能进行GET请求,请求的数据作为回调函数参数进行处理。

Ajax 用法示例

  1. 发送 GET 请求
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
}
xhr.open('GET', '/api/user?id=123', true);
xhr.send();
  1. 发送 POST 请求
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
}
xhr.open('POST', '/api/user', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({ id: '123' }));

JSONP 用法示例

function jsonp (url, callback) {
  var callbackName = 'jsonp_' + Date.now();
  var script = document.createElement('script');
  script.src = url + '&callback=' + callbackName;
  window[callbackName] = function (data) {
    callback && callback(data);
    delete window[callbackName];
    document.body.removeChild(script);
  };
  document.body.appendChild(script);
}

jsonp('/api/user?id=123', function (data) {
  console.log(data);
});

上述代码动态生成一个 script 标签,设置其 src 属性为请求的 URL,同时在 URL 中添加回调函数名称。服务器在返回数据时将数据包裹在回调函数名称中,浏览器在执行 script 标签内的代码时会直接将数据作为参数传入回调函数中。

总结:

使用 Ajax 和 JSONP 可以实现不刷新页面的数据加载,但是各有优缺点。如果在同域情况下请求,优先选用 Ajax,如果是跨域请求,只能使用 JSONP。同时,Ajax 请求是 XMLHttpRequest 对象请求,处理 JSON 数据非常方便,而 JSONP 只能处理JSON 格式数据,但是 JSONP 的兼容性更好,可以应对更多浏览器。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ajax与jsonp的区别及用法 - Python技术站

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

相关文章

  • 基于jQuery实现自动轮播旋转木马特效

    下面是基于jQuery实现自动轮播旋转木马特效的完整攻略: 一、前置知识 在进行该攻略之前,你需要掌握以下知识: HTML基础 CSS基础 jQuery基础 二、思路分析 在编写代码之前,我们需要先了解实现自动轮播旋转木马特效的基本思路。 使用HTML和CSS布局轮播图容器。 使用jQuery实现轮播图实际的旋转效果,这里需要用到jQuery的animate…

    jquery 2023年5月27日
    00
  • jquery indexOf使用方法

    jQuery indexOf使用方法攻略 1. 概述 JavaScript自带了indexOf方法,用于检测一个元素在数组中是否存在,并返回该元素在数组中的下标位置。然而,对于jQuery对象中的元素,我们不能直接使用indexOf方法。因此,我们需要使用jQuery提供的方法来实现indexOf的功能。 2. jQuery的inArray方法 jQuery…

    jquery 2023年5月27日
    00
  • jQuery height()、innerHeight()、outerHeight()函数的区别详解

    下面是关于jQuery height()、innerHeight()、outerHeight()函数的区别详解: 1. height函数 height()函数是jQuery用于获取或设置元素的高度的函数。它返回的是元素的内容高度,不包括边框、内边距和外边距。如果参数为空,该函数返回第一个匹配元素的高度。如果参数为一个函数,则该函数用于计算每一个匹配元素的高度…

    jquery 2023年5月27日
    00
  • jQuery选择器源码解读(四):tokenize方法的Expr.preFilter

    jQuery选择器源码解读(四):tokenize方法的Expr.preFilter 在jQuery的Sizzle引擎中,tokenize方法负责将输入的选择器划分成一个个的Token。这些Token是选择器的构成部分,是后续处理的基础。而Expr.preFilter就是在Tokenize方法中使用的一个辅助方法,用于处理一些特殊的选择器表达式。 Expr.…

    jquery 2023年5月27日
    00
  • jQuery $.data()方法使用注意细节

    是的,$.data()方法是 jQuery 内置方法之一,用于在HTML与JavaScript之间传递自定义数据,一些使用注意细节可能需要注意,以下是使用的详细攻略。 使用$.data方法传送自定义数据 $.data()方法是jQuery的内置方法之一,用于将自定义数据保存在一个元素上,以便在事件处理结束后能够访问该数据。$.data()方法接受两个参数:第…

    jquery 2023年5月28日
    00
  • jQuery UI Datepicker defaultDate选项

    以下是关于 jQuery UI Datepicker defaultDate 选项的详细攻略: jQuery UI Datepicker defaultDate 选项 defaultDate 选项允许您设置日期选择器的默认日期。如果用户没有选择日期,则默认日期将显示在日期选择器中。 语法 $(selectordatepicker({ defaultDate:…

    jquery 2023年5月11日
    00
  • jQWidgets jqxDataTable showStatusbar属性

    以下是关于“jQWidgets jqxDataTable showStatusbar 属性”的完整攻略,包含两个示例说明: 简介 showStatusbar 属性是 jqxDataTable 控件的一个属性,用于控制是否显示状态栏。该属性的值为 false,即默认不显示状态栏。 攻略 以下是 jqxDataTable 控件的showStatusbar` 属性…

    jquery 2023年5月11日
    00
  • jQuery Mobile Pagecontainer移除事件

    jQuery Mobile Pagecontainer是一种用于处理移动设备上网页应用页面导航的工具,利用该工具可以实现快速定位到目标页面、进行数据预加载等功能。在使用Pagecontainer时,经常需要根据需要动态地添加或移除页面元素。本文将详细讲解如何使用jQuery Mobile Pagecontainer移除事件。 1. Pagecontainer…

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