uniapp H5页面使用uni.request时,出现跨域问题

概述

  • HBuilderX 2.5.1
  • uniapp中提供了uni.request进行向http请求数据(可以理解为ajax请求)。
  • uni.request 不支持 jsonp。
  • 一种办法是:在uni-app 的项目中 manifest.json文件中配置跨域代理

manifest.json编辑

使用源码视图进行编辑
在这里插入图片描述

manifest.json文件配置

在manifest.json中编辑h5节点(没有可以手动添加):

"h5" : {
        "devServer" : {
            "port" : 80,
            "disableHostCheck" : true,
            "proxy" : {
                "/api" : {
                    "target" : "http://xxx.mydomain.com",
                    "changeOrigin" : true,
                    "secure" : false
                }
            }
        }
    }

调用

接口地址:http://xxx.mydomain.com/api/getCity

uni.request({
	url: '/api/getCity',
	method: 'GET',
	data: {},
	success: res => {console.log(JSON.stringify(res))},
	fail: () => {},
	complete: () => {}
});

特殊说明一下

manifest.json文件中配置的proxy信息为如下时:

"h5" : {
        "devServer" : {
            "port" : 80,
            "disableHostCheck" : true,
            "proxy" : {
                "/api" : {
                    "target" : "http://xxx.mydomain.com",
                    "changeOrigin" : true,
                    "secure" : false
                }
            }
        }
    }

表示以/api开头的请求前面添加上http://xxx.mydomain.com。比如uni.request请求/api/getCity,则实际请求地址为http://xxx.mydomain.com/api/getCity

如果我的接口地址没有前缀怎么办?比如是这样的:http://api.mydomain.com/getCityhttp://api.mydomain.com/getUser。可以使用pathRewrite进行path重写。可以这样配置:

"h5" : {
        "devServer" : {
            "port" : 80,
            "disableHostCheck" : true,
            "proxy" : {
                "/api" : {
                    "target" : "http://xxx.mydomain.com",
                    "changeOrigin" : true,
                    "secure" : false,
                    "pathRewrite":{"^/api":""}
                }
            }
        }
    }

这样配置后,uni.request请求/api/getCity,则实际请求地址为http://xxx.mydomain.com/getCity

再特殊说明一下

HBuilderX支持热部署。但,不通过HBuilderX修改manifest.json文件时,则不会热部署。修改完manifest.json文件后,手动重新发布H5 app才能生效。

uni.request跨域访问可以通过改变请求url的方式实现。一种方式是使用代理访问,即在url中添加一个代理地址,使请求先发送到代理服务器,再由代理服务器发送到目标服务器。例如,可以将请求url改为'/zs1028/stat...ouces_2023/-/...',这样就能实现跨域访问了。 另一种方式是使用路径重写,即将以/api开头的请求添加上指定的域名前缀。例如,如果uni.request请求的地址是/api/getCity,可以通过在url前面添加'http://xxx.mydomain.com'来实现跨域访问,即实际请求地址为'http://xxx.mydomain.com/api/getCity'。 需要注意的是,跨域请求涉及到安全性问题,因此在实际应用中需要确保目标服务器允许跨域请求。另外,还可以通过设置请求头、使用JSONP等方式来实现跨域访问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【uniappuni.request请求跨域问题解决方案](https://blog.csdn.net/zs1028/article/details/129365892)[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* *3* [uniapp H5页面使用uni.request出现跨域问题](https://blog.csdn.net/sayyy/article/details/106269732)[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 ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值