js:json请求和jsonp请求

简介: js:json请求和jsonp请求
请求方式 同源检查 解决方式
json 服务端支持
jsonp 不需要服务端支持

目录

一、使用json请求

1.1 未开启跨域

安装依赖

$ pnpm i express

服务端代码

// server.js
const express = require("express");
const app = express();
// 返回json数据
app.get("/api/json", (request, response) => {
  response.json({ msg: "ok" });
});
const port = process.env.PORT || 5000;
app.listen(port, () => {
  console.log(`Server runing on http://127.0.0.1:${port}`);
});

启动服务端

$ node server.js
Server runing on http://127.0.0.1:5000

客户端依赖

$ pnpm i http-server
# 启动静态服务器
$ npx http-server -p 5500 -c-1

此时,后端服务器运行在5000 端口,前端静态服务器在运行在5500 端口

出现了跨域问题

前端访问地址:http://127.0.0.1:5500/index.html
接口地址:http://127.0.0.1:5000/api/json

发送json 请求

// script.js
fetch("http://127.0.0.1:5000/api/json")
      .then(function (response) {
        return response.json();
      })
      .then(function (data) {
        console.log(data);
      });

直接显示跨域错误

Access to fetch at 'http://127.0.0.1:5000/api/json' 
from origin 'http://127.0.0.1:5500' has been blocked by CORS policy: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
If an opaque response serves your needs, 
set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

1.2 开启跨域

安装依赖

$ pnpm i cors

服务端代码

// server.js
const express = require("express");
var cors = require('cors')
const app = express();
// 开启跨域
app.use(cors())
// 返回json数据
app.get("/api/json", (request, response) => {
  response.json({ msg: "ok" });
});
const port = process.env.PORT || 5000;
app.listen(port, () => {
  console.log(`Server runing on http://127.0.0.1:${port}`);
});

重启服务后,前端可以正常获取接口数据

二、使用jsonp

服务端代码

// server.js
const express = require("express");
// var cors = require('cors')
const app = express();
// 开启跨域
// app.use(cors())
// 返回json数据
app.get("/api/json", (request, response) => {
  response.json({ msg: "ok" });
});
// 返回jsonp数据
app.get("/api/jsonp", (request, response) => {
    response.jsonp({ msg: "ok" });
  });
const port = process.env.PORT || 5000;
app.listen(port, () => {
  console.log(`Server runing on http://127.0.0.1:${port}`);
});

前端代码

// 动态导入script
function importScript(src) {
  var hm = document.createElement("script");
  hm.src = src;
  var s = document.getElementsByTagName("script")[0];
  s.parentNode.insertBefore(hm, s);
}
// 全局的响应处理函数
function handleResponse(res) {
  console.log(res);
}
(function () {
  sendJsonpBtn.addEventListener("click", function () {
    importScript("http://127.0.0.1:5000/api/jsonp?callback=handleResponse");
    // jsonp的响应
    // /**/ typeof handleResponse === 'function' && handleResponse({"msg":"ok"});
  });
})();

不需要开启跨域就可以直接获取到数据了

相关文章
|
3月前
|
JavaScript 前端开发 API
Node.js中发起HTTP请求的五种方式
以上五种方式,尽管只是冰山一角,但已经足以让编写Node.js HTTP请求的你,在连接世界的舞台上演奏出华丽的乐章。从原生的 `http`到现代的 `fetch`,每种方式都有独特的风格和表现力,让你的代码随着项目的节奏自由地舞动。
404 65
|
6月前
|
XML JSON API
淘宝商品详情API的调用流程(python请求示例以及json数据示例返回参考)
JSON数据示例:需要提供一个结构化的示例,展示商品详情可能包含的字段,如商品标题、价格、库存、描述、图片链接、卖家信息等。考虑到稳定性,示例应基于淘宝开放平台的标准响应格式。
|
11月前
|
XML JSON 安全
SSM:请求参数与回显&json
本文介绍了请求参数处理、过滤器和拦截器的使用方法。包括如何通过 `@RequestParam` 和 `@ModelAttribute` 绑定请求参数,使用 Lombok 简化实体类开发,实现过滤器处理字符编码,以及配置拦截器进行请求前后的处理。同时,还展示了如何使用 `@ResponseBody` 返回 JSON 数据,并解决了 JSON 编码问题。
138 0
|
6月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
9月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
212 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
10月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
241 4
|
11月前
|
JavaScript
Node.js GET/POST请求
10月更文挑战第6天
128 2
Node.js GET/POST请求
|
11月前
|
存储 JSON JavaScript
JavaScript JSON
【10月更文挑战第7天】JSON 是 JavaScript 中非常重要的一个数据格式,它为数据的表示和传输提供了一种简单而有效的方式。掌握 JSON 的使用方法和特点,对于开发高质量的 JavaScript 应用具有重要意义。
|
11月前
|
JSON API 数据格式
postman如何发送json请求其中file字段是一个图片
postman如何发送json请求其中file字段是一个图片
389 4
|
11月前
|
缓存 JavaScript CDN
一次js请求一般情况下有哪些地方会有缓存处理?
一次js请求一般情况下有哪些地方会有缓存处理?
108 4