jsonp原理,封装,应用(vue项目)

jsonp原理

JSON是一种轻量级的数据传输格式。

JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

jsonp封装 

import originJSONP from 'jsonp'

export default function jsonp (url, data, option) {
//url接口拼接 url
+= (url.indexOf('?') < 0 ? '?' : '&') + prarm(data) //es6的promise对象 return new Promise((resolve, reject) => { originJSONP(url, option, (err, data) => { if (!err) { resolve(data) } else { reject(err) } }) }) } function prarm (data) { let url = '' for (var k in data) { let value = data[k] !== undefined ? data[k] : '' url += `&${k}=${encodeURIComponent(value)}` } return url ? url.substring(1) : '' }

 

jsonp应用

export const options = {
  param: 'jsonpCallback'
}
import { commonParams, options } from './config'

 import jsonp from 'common/js/jsonp'

export function getRecommend () {
  //请求地址 const url
= ''
//请求数据凭借
const data = Object.assign({}, commonParams, { uin: 0 }) return jsonp(url, data, options) }
data () {
    return {
      recommoneds: []
    }
  },
  created () {
    this._getRecommend()
  },
  methods: {
    _getRecommend () {
      getRecommend().then(res => {
        if (res.code === ERR_OK) {
          this.recommoneds = res.data
          console.log(res.data)
        }
      })
    }
  },

很简单的一个跨域拿数据

转载于:https://www.cnblogs.com/webPang/p/8669700.html

Vue3本身不提供jsonp的支持,但是你可以使用第三方库来实现jsonp请求。在你提供的引用中可以看到使用了一个自定义的函数jsonp来实现jsonp请求。该函数接受一个配置对象作为参数,其中包括url、key和callback等属性。url属性指定了请求的地址,key属性指定了jsonp回调函数的参数名(默认为'callback'),callback属性指定了请求成功后的回调函数。 jsonp函数内部通过创建一个script元素,并设置其src属性来实现jsonp请求。在请求url的末尾拼接了一个参数,参数的值由callback函数的名称决定,这个参数的作用是告诉服务器将响应数据包装到该函数的调用中。然后将script元素添加到head标签中,完成请求。 当服务器返回响应时,会执行callback函数并传入响应数据作为参数。在你引用的代码中,callback函数只是简单地将响应数据打印到控制台。 所以,如果你想在Vue3中使用jsonp,你可以通过使用该自定义的jsonp函数来发送jsonp请求,并在回调函数中处理响应数据。你需要传入一个配置对象,其中包括url和callback等属性,配置对象中的其他属性可根据需要进行设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Vue3 项目里面使用 自己封装jsonp](https://blog.csdn.net/gu2022_3_5_21_23/article/details/128488927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue-cli3 调用jsonp](https://blog.csdn.net/chpswg/article/details/98735224)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值