原生js jquery ajax请求以及jsonp的调用方法

yizhihongxing

下面是详细讲解“原生js jquery ajax请求以及jsonp的调用方法”的完整攻略:

原生js ajax请求

原生js的ajax请求可以通过XMLHttpRequest对象实现。以下是ajax请求的基本流程:

  1. 创建一个XMLHttpRequest对象。
var xhr = new XMLHttpRequest();
  1. 发送请求。
xhr.open(method, url, async);
xhr.send();

其中,method表示请求方法,可以是"GET"、"POST"等;url表示请求的URL;async表示是否为异步请求,默认值为true。

  1. 监听状态变化。
xhr.onreadystatechange = function() {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
}

在状态变化时会触发onreadystatechange函数,通过xhr.readyState可以获取当前的状态,通过xhr.status可以获取请求的状态码,200表示请求成功。

jquery ajax请求

使用jquery发起ajax请求可以简化代码,并且兼容性更好。以下是jquery ajax请求的基本流程:

  1. 发送请求。
$.ajax({
  url: url,
  type: method,
  dataType: dataType,
  success: function(data) {
    console.log(data);
  },
  error: function(xhr, errorType, error) {
    console.log(error);
  }
});

其中,url表示请求的URL;type表示请求类型,可以是"GET"、"POST"等;dataType表示响应数据的类型,可以是"json"、"xml"等。success是请求成功时的回调函数,data是返回的数据;error是请求失败时的回调函数。

  1. 监听状态变化。

jquery的ajax函数也支持在发送请求时监听状态变化,通过xhr参数可以获取XMLHttpRequest对象,并进行操作。

$.ajax({
  url: url,
  type: method,
  dataType: dataType,
  xhr: function() {
    var xhr = new XMLHttpRequest();
    xhr.onreadystateChange = function() {
      if (xhr.readyState === 4 && xhr.status === 200) {
        console.log(xhr.responseText);
      }
    };
    return xhr;
  }
});

jsonp请求

jsonp请求是一种跨域请求方式,是通过动态添加script标签实现的。以下是jsonp请求的基本流程:

  1. 创建script元素。
var script = document.createElement('script');
  1. 设置src属性,并发送请求。
script.src = url;
document.head.appendChild(script);

其中,url指向的是一个返回数据的接口地址,由于跨域不能使用XMLHttpRequest对象,因此需要使用<script>标签加载。以GET方法为例,返回的是一个JavaScript脚本,其中包含一个以参数形式返回的回调函数,例如:

callback({ "status": "success", "data": { "user": "admin", "pwd": "123456" }});
  1. 定义回调函数。

在返回的JavaScript脚本中有一个类似于callback({ "status": "success", "data": { "user": "admin", "pwd": "123456" }});的语句,其中的callback就是约定的回调函数名。因此,在发送jsonp请求时需要定义对应的回调函数:

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

在jsonp请求中,回调函数名通常是由客户端自己生成的一个唯一的随机字符串。

示例1:使用原生js实现ajax请求

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.github.com/users', true);
xhr.onreadystatechange = function() {
  if (xhr.readyState === 4 && xhr.status === 200) {
    var data = JSON.parse(xhr.responseText);
    console.log(data);
  }
};
xhr.send();

示例2:使用jquery实现ajax请求

$.ajax({
  url: 'https://api.github.com/users',
  type: 'GET',
  dataType: 'json',
  success: function(data) {
    console.log(data);
  },
  error: function(xhr, errorType, error) {
    console.log(error);
  }
});

示例3:使用jsonp实现跨域请求

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

var script = document.createElement('script');
script.src = 'https://api.github.com/users?callback=callback';
document.head.appendChild(script);

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js jquery ajax请求以及jsonp的调用方法 - Python技术站

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

相关文章

  • vue2模拟vue-element-admin手写角色权限的实现

    Vue2模拟Vue-element-admin手写角色权限的实现,可以通过以下步骤完成: 1. 安装依赖 首先需要安装以下依赖:Vue-Router(用于控制路由)、Axios(用于发送http请求),可使用如下命令: npm install vue-router axios 2. 构建基本页面布局 在Vue项目中创建相应的组件并进行基本页面布局,如Head…

    JavaScript 2023年6月11日
    00
  • 3款实用的在线JS代码工具(国外)

    3款实用的在线JS代码工具(国外) 1. JSFiddle 简介 JSFiddle 是一个在线的代码编辑器,可以用来编辑 HTML/CSS/JavaScript 代码,并且可以立即运行和分享代码。它可以在左侧编辑 HTML/CSS/JavaScript 代码,在中间显示运行结果,在右侧显示 JavaScript 控制台。 使用方法 打开 JSFiddle 的…

    JavaScript 2023年5月19日
    00
  • JS 中document.URL 和 windows.location.href 的区别

    JS 中 document.URL 和 window.location.href 的区别有以下几点: 1. 基本概念 document.URL 和 window.location.href 都是用来获取当前网页的 URL 地址。它们是 window 对象的属性,可以通过 window.document.URL 和 window.location.href 的…

    JavaScript 2023年6月11日
    00
  • JavaScript设计模式之单例模式实例

    JavaScript设计模式之单例模式实例 什么是单例模式 单例模式是一种创建型设计模式,用于确保一个类只有一个实例,并提供对该实例的全局访问点。 在JavaScript中,单例模式可以通过类的静态属性或闭包来实现。下面我们会用两个例子来说明。 静态属性实现 在这个例子中,我们定义一个Singleton类,使用类的静态属性来实现单例模式。 class Sin…

    JavaScript 2023年6月10日
    00
  • Javascript NaN 属性

    以下是关于JavaScript NaN属性的完整攻略。 JavaScript NaN属性 JavaScript NaN属性是全局对象的一个属性,它表示“Not a Number”,不是数字。当一个值无法被解析为数字时,就返回NaN。NaN是一个特殊的数字值,它与任何其他值都不相等,包括它自己。 下面是一个使用NaN属性的示例: console.log(NaN…

    JavaScript 2023年5月11日
    00
  • 获取焦点时,利用js定时器设定时间执行动作

    获取焦点时,利用js定时器设定时间执行动作的具体步骤如下: 1. 绑定获取焦点事件 首先,需要在html中为需要获取焦点的元素添加获取焦点事件。可以使用onfocus属性或者addEventListener方法添加事件监听器。 例如,我们可以为一个input元素添加获取焦点事件监听器,代码如下: <input type="text"…

    JavaScript 2023年6月11日
    00
  • JavaScript中split() 使用方法汇总

    JavaScript中的split()方法是字符串对象中常用的方法之一,它可以根据指定的分隔符将一个字符串拆分成数组。这个方法在数据处理、字符串操作、数据分割等场景中非常实用。本文将对split()方法进行详细的讲解,希望能对读者能有所帮助。 split()方法的语法和参数 split()方法的语法如下: str.split(separator, limit…

    JavaScript 2023年5月28日
    00
  • JavaScript中变量提升 Hoisting

    JavaScript中变量提升 Hoisting 在JavaScript中,变量提升指的是在代码执行之前,JavaScript引擎将所有的变量声明提升到作用域的顶部,无论这些变量是在何处声明的。这意味着我们可以在变量声明之前使用变量。 变量提升的过程 当JavaScript代码在执行之前被解析时,所有的变量声明都被提升到了函数或全局作用域的顶部。这个过程被称…

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